persistentstorage/store/USTRM/US_SHARE.CPP
changeset 0 08ec8eefde2f
--- /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);
+	}
+