williamr@2: /* williamr@2: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * williamr@2: */ williamr@2: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef STREAMABLEPTRARRAY_INL williamr@4: #define STREAMABLEPTRARRAY_INL williamr@2: williamr@2: namespace ContentAccess williamr@2: { williamr@2: template williamr@2: inline RStreamablePtrArray::RStreamablePtrArray() williamr@2: { williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::Close() williamr@2: { williamr@2: iArray.ResetAndDestroy(); williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::AppendL(T* aElement) williamr@2: { williamr@2: User::LeaveIfError(iArray.Append(aElement)); williamr@2: } williamr@2: williamr@2: template williamr@2: inline TInt RStreamablePtrArray::Count() const williamr@2: { williamr@2: return iArray.Count(); williamr@2: } williamr@2: williamr@2: template williamr@2: inline T* RStreamablePtrArray::operator [] (TInt aIndex) const williamr@2: { williamr@2: // case the value from the array back to its original type williamr@2: return iArray[aIndex]; williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::ResetAndDestroy() williamr@2: { williamr@2: iArray.ResetAndDestroy(); williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::InternalizeL(RReadStream& aStream) williamr@2: { williamr@2: TInt i; williamr@2: williamr@2: // Read the number of CMetaData objects from the stream williamr@2: TInt count = aStream.ReadInt32L(); williamr@2: williamr@2: // Read the objects from the stream and add them to the array williamr@2: for(i = 0; i < count; i++) williamr@2: { williamr@2: // create a new T object from the stream using the supplied factory function williamr@2: T* element = T::NewL(aStream); williamr@2: CleanupStack::PushL(element); williamr@2: williamr@2: AppendL(element); williamr@2: williamr@2: // Finished with cleanup stack, element now owned by the array so don't delete williamr@2: CleanupStack::Pop(element); williamr@2: } williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::ExternalizeL(RWriteStream& aStream) const williamr@2: { williamr@2: TInt i; williamr@2: // Write the total number of elements to the stream williamr@2: aStream.WriteInt32L(iArray.Count()); williamr@2: williamr@2: // Ask the array elements to write themselves to the stream one by one williamr@2: for(i = 0; i < iArray.Count();i++) williamr@2: { williamr@2: iArray[i]->ExternalizeL(aStream); williamr@2: } williamr@2: } williamr@2: williamr@2: template williamr@2: inline void RStreamablePtrArray::RemoveL(TInt aIndex) williamr@2: { williamr@2: if ( (aIndex >= iArray.Count()) || (aIndex < 0) ) williamr@2: { williamr@2: User::Leave(KErrArgument); williamr@2: } williamr@2: iArray.Remove(aIndex); williamr@2: } williamr@2: } williamr@4: williamr@4: #endif // STREAMABLEPTRARRAY_INL williamr@4: