contentmgmt/contentaccessfwfordrm/inc/StreamablePtrArray.inl
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/contentaccessfwfordrm/inc/StreamablePtrArray.inl	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+namespace ContentAccess
+{
+template <class T>
+inline RStreamablePtrArray<T>::RStreamablePtrArray()
+	{
+	}
+
+template <class T>
+inline void RStreamablePtrArray<T>::Close()
+	{
+	iArray.ResetAndDestroy();
+	}
+
+template <class T>
+inline void RStreamablePtrArray<T>::AppendL(T* aElement)
+	{
+	User::LeaveIfError(iArray.Append(aElement));
+	}
+
+template <class T>
+inline TInt RStreamablePtrArray<T>::Count() const
+	{
+	return iArray.Count();
+	}
+
+template <class T>
+inline T* RStreamablePtrArray<T>::operator [] (TInt aIndex) const
+	{
+	// case the value from the array back to its original type
+	return iArray[aIndex];
+	}
+
+template <class T>
+inline void RStreamablePtrArray<T>::ResetAndDestroy()
+	{
+	iArray.ResetAndDestroy();
+	}
+
+template <class T>		
+inline void RStreamablePtrArray<T>::InternalizeL(RReadStream& aStream)
+	{
+	TInt i;
+
+	// Read the number of CMetaData objects from the stream
+	TInt count = aStream.ReadInt32L();
+
+	// Read the objects from the stream and add them to the array
+	for(i = 0; i < count; i++)
+		{
+		// create a new T object from the stream using the supplied factory function
+		T* element = T::NewL(aStream);
+		CleanupStack::PushL(element);
+
+		AppendL(element);
+
+		// Finished with cleanup stack, element now owned by the array so don't delete
+		CleanupStack::Pop(element);
+		}
+	}
+
+template <class T>
+inline void RStreamablePtrArray<T>::ExternalizeL(RWriteStream& aStream) const
+	{	
+	TInt i;
+	// Write the total number of elements to the stream
+	aStream.WriteInt32L(iArray.Count());
+	
+	// Ask the array elements to write themselves to the stream one by one 
+	for(i = 0; i < iArray.Count();i++)
+		{
+		iArray[i]->ExternalizeL(aStream);
+		}
+	}
+
+template <class T>
+inline void RStreamablePtrArray<T>::RemoveL(TInt aIndex)
+	{
+	if ( (aIndex >= iArray.Count()) || (aIndex < 0) )
+		{
+		User::Leave(KErrArgument);
+		}
+	iArray.Remove(aIndex);
+	}
+}