--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/store/USTRM/US_SHARE.CPP Fri Jan 22 11:06:30 2010 +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);
+ }
+