diff -r 000000000000 -r bde4ae8d615e os/persistentdata/persistentstorage/store/USTRM/US_SHARE.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/persistentdata/persistentstorage/store/USTRM/US_SHARE.CPP Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,191 @@ +// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "US_STD.H" + +EXPORT_C RShareBuf::RShareBuf() + : iHost(NULL) +/** Constructs an empty shared stream buffer object. + +Call one of the Open() functions to prepare the stream. */ + {} + +EXPORT_C void RShareBuf::Open(TStreamExchange& aHost,TStreamPos aPos,TInt aMode) +/** Prepares the shared stream buffer for streaming. + +The function sets the read mark and/or the write mark to the specified position +within the host stream. + +@param aHost The object that manages shared streaming. +@param aPos The position within the host stream. +@param aMode The streaming mode. This can be read and/or write, as indicated +by the ERead and EWrite bits. +@see MStreamBuf::TRead +@see MStreamBuf::TWrite */ + { + iHost=&aHost; + if (aMode&ERead) + iRMark=aPos; + else + iRMark.Clear(); + if (aMode&EWrite) + iWMark=aPos; + else + iWMark.Clear(); + } + +EXPORT_C void RShareBuf::DoRelease() +// +// Withdraw this stream buffer's marks. +// + { + if (iHost!=NULL) + { + TStreamExchange& host=*iHost; + iRMark.Withdraw(host); + iWMark.Withdraw(host); + iHost=NULL; + } + } + +EXPORT_C TInt RShareBuf::DoReadL(TAny* aPtr,TInt aMaxLength) +// +// Read up to aMaxLength bytes. +// + { + return iRMark.ReadL(Host(),aPtr,aMaxLength); + } + +EXPORT_C TInt RShareBuf::DoReadL(TDes8& aDes,TInt aMaxLength,TRequestStatus& aStatus) +// +// Read up to aMaxLength bytes asynchronously. +// + { + return iRMark.ReadL(Host(),aDes,aMaxLength,aStatus); + } + +EXPORT_C TStreamTransfer RShareBuf::DoReadL(MStreamInput& anInput,TStreamTransfer aTransfer) +// +// Push up to aTransfer bytes into anInput. +// + { + return iRMark.ReadL(Host(),anInput,aTransfer); + } + +EXPORT_C void RShareBuf::DoWriteL(const TAny* aPtr,TInt aLength) +// +// Write aLength bytes. +// + { + iWMark.WriteL(Host(),aPtr,aLength); + } + +EXPORT_C TInt RShareBuf::DoWriteL(const TDesC8& aDes,TInt aMaxLength,TRequestStatus& aStatus) +// +// Write up to aMaxLength bytes asynchronously. +// + { + return iWMark.WriteL(Host(),aDes,aMaxLength,aStatus); + } + +EXPORT_C TStreamTransfer RShareBuf::DoWriteL(MStreamOutput& anOutput,TStreamTransfer aTransfer) +// +// Pull up to aTransfer bytes from anOutput. +// + { + return iWMark.WriteL(Host(),anOutput,aTransfer); + } + +EXPORT_C TStreamPos RShareBuf::DoSeekL(TMark aMark,TStreamLocation aLocation,TInt anOffset) +// +// Position the mark(s) indicated by aMark at anOffset from aLocation. +// + { + TStreamExchange& host=Host(); + if (!aMark) + { + TStreamMark mark; + return mark.SeekL(host,aLocation,anOffset); + } +// + __ASSERT_ALWAYS(!(aMark&~(ERead|EWrite)),Panic(EStreamMarkInvalid)); + TStreamPos pos(0); + if (aMark&ERead) + { + __ASSERT_ALWAYS(aLocation!=EStreamMark||aMark==ERead,Panic(EStreamMarkInvalid)); + if (!iRMark.RelatesTo(host)) + __LEAVE(KErrNotReady); +// + pos=iRMark.SeekL(host,aLocation,anOffset); + } + if (aMark&EWrite) + { + if (!iWMark.RelatesTo(host)) + __LEAVE(KErrNotReady); +// + TStreamPos p=iWMark.SeekL(host,aLocation,anOffset); + __ASSERT_DEBUG(aMark==EWrite||p==pos,User::Invariant()); + return p; + } +// + return pos; + } + +EXPORT_C RShareReadStream::RShareReadStream(TStreamExchange& aHost,TStreamPos aPos) +/** Constructs the shared read stream object and prepares the shared stream for +reading. + +@param aHost The object that manages shared streaming. +@param aPos The position of the stream within the host stream. Defaults to +the beginning of the host stream, if not explicitly specified. +@see KStreamBeginning */ + { + Open(aHost,aPos); + } + +EXPORT_C void RShareReadStream::Open(TStreamExchange& aHost,TStreamPos aPos) +/** Prepares the shared stream for reading. + +@param aHost The object that manages shared streaming. +@param aPos The position of the stream within the host stream. Defaults to +the beginning of the host stream, if not explicitly specified. */ + { + iSource.Open(aHost,aPos,iSource.ERead); + RReadStream::Attach(&iSource); + } + +EXPORT_C RShareWriteStream::RShareWriteStream(TStreamExchange& aHost,TStreamPos aPos) +/** Constructs the shared write stream object and prepares the shared stream for +writing. + +@param aHost The object that manages shared streaming. +@param aPos The position of the stream within the host stream. Defaults to +the beginning of the host stream, if not explicitly specified. +@see KStreamBeginning */ + { + Open(aHost,aPos); + } + +EXPORT_C void RShareWriteStream::Open(TStreamExchange& aHost,TStreamPos aPos) +/** Prepares the shared stream for writing. + +@param aHost The object that manages shared streaming. +@param aPos The position of the stream within the host stream. Defaults to +the beginning of the host stream, if not explicitly specified. */ + { + iSink.Open(aHost,aPos,iSink.EWrite); + RWriteStream::Attach(&iSink); + } +