--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/statsrv/device/source/statapi/src/datasupplier_memory.cpp Mon Mar 08 15:03:44 2010 +0800
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2005-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:
+*
+*/
+
+
+
+ /*************************************************************************
+ *
+ * System Includes
+ *
+ *************************************************************************/
+
+/*************************************************************************
+ *
+ * Local Includes
+ *
+ *************************************************************************/
+
+#include "datasupplier_memory.h"
+
+/*************************************************************************
+ *
+ * Definitions
+ *
+ *************************************************************************/
+
+/*************************************************************************
+ *
+ * CDataSupplierMemory - Construction
+ *
+ *************************************************************************/
+CDataSupplierMemory *CDataSupplierMemory::NewL()
+ {
+ CDataSupplierMemory *self = new (ELeave) CDataSupplierMemory();
+
+ CleanupStack::PushL(self);
+
+ self->ConstructL();
+
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+CDataSupplierMemory::CDataSupplierMemory() : CBase(),
+ iDataBuffer( NULL ), iCurrentLocation( 0 )
+ {
+ ;
+ }
+
+void CDataSupplierMemory::ConstructL( void )
+ {
+ iLock.CreateLocal( EOwnerProcess );
+ }
+
+CDataSupplierMemory::~CDataSupplierMemory( )
+ {
+ iLock.Wait( );
+ {
+ delete iDataBuffer;
+ iDataBuffer = NULL;
+ iCurrentLocation = 0;
+
+ iLock.Close( );
+ }
+ }
+
+/*************************************************************************
+ *
+ * CDataSupplierMemory - Public interface
+ *
+ *************************************************************************/
+
+/*************************************************************************
+ *
+ * Delete
+ *
+ *************************************************************************/
+
+void CDataSupplierMemory::Delete( void )
+ {
+ delete this;
+ }
+
+/*************************************************************************
+ *
+ * GetTotalSize
+ *
+ *************************************************************************/
+
+TInt CDataSupplierMemory::GetTotalSize( TInt &aTotalSize )
+ {
+ TInt err = KErrNone;
+ TInt size = 0;
+
+ iLock.Wait( );
+ {
+ size = iDataBuffer->Length( );
+
+ aTotalSize = size;
+
+ iLock.Signal( );
+ }
+
+ return ( err );
+ }
+
+/*************************************************************************
+ *
+ * GetRemainingSize
+ *
+ *************************************************************************/
+
+TInt CDataSupplierMemory::GetRemainingSize( TInt &aRemainingSize )
+ {
+ TInt err = KErrNone;
+ TInt remaining = 0;
+
+ iLock.Wait( );
+ {
+ TInt totalSize = 0;
+
+ err = GetTotalSize( totalSize );
+
+ if( err == KErrNone )
+ {
+ remaining = totalSize - iCurrentLocation;
+
+ aRemainingSize = remaining;
+ }
+
+ iLock.Signal( );
+ }
+
+ return ( err );
+ }
+
+/*************************************************************************
+ *
+ * SetData
+ *
+ *************************************************************************/
+
+TInt CDataSupplierMemory::SetData( const TDesC8 &aSource )
+ {
+ TInt err = KErrNone;
+
+ iLock.Wait( );
+ {
+ delete iDataBuffer;
+ iDataBuffer = NULL;
+
+ TInt length = aSource.Length( );
+ iDataBuffer = HBufC8::New( length );
+
+ if(iDataBuffer)
+ {
+ *iDataBuffer = aSource;
+ }
+ else
+ {
+ err = KErrNoMemory;
+ }
+
+ iCurrentLocation = 0;
+ iLock.Signal( );
+ }
+
+#ifdef _DEBUG
+ {
+ TInt totalSize = 0;
+ GetTotalSize( totalSize );
+ TInt remainingSize = 0;
+ GetRemainingSize( remainingSize );
+ }
+#endif
+
+ return ( err );
+ }
+
+/*************************************************************************
+ *
+ * GetData
+ *
+ *************************************************************************/
+
+TInt CDataSupplierMemory::GetData( HBufC8 &aDestination,
+ TInt aLengthToCopy, TInt &aActuallyCopied )
+ {
+ TInt err = KErrNone;
+
+ iLock.Wait( );
+ {
+ TInt remainingSize = 0;
+ err = GetRemainingSize( remainingSize );
+
+ if( err == KErrNone )
+ {
+ TInt toCopy = Min( aLengthToCopy, remainingSize );
+
+ TPtr8 destPtr( aDestination.Des( ) );
+ destPtr.Copy( iDataBuffer->Ptr( ) + iCurrentLocation,
+ toCopy );
+
+ if( err == KErrNone )
+ {
+ iCurrentLocation += toCopy;
+ aActuallyCopied = toCopy;
+ }
+ }
+
+ iLock.Signal( );
+ }
+
+ return ( err );
+ }