diff -r f5050f1da672 -r 04becd199f91 javamanager/javaregistry/legacy/installedappsregistry/inc/arrayutils.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javaregistry/legacy/installedappsregistry/inc/arrayutils.inl Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2003 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: Implementation of various helper functions used for +* serialization. +* +*/ + + +///////////////////////////////////////////////////////////////////// +// RPointerArray utilities +///////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CopyPointerArrayL +// ----------------------------------------------------------------------------- +// +template +void CopyPointerArrayL(RPointerArray& aNew, const RPointerArray& aOld) +{ + for (TInt i = 0; i < aOld.Count(); ++i) + { + T* item = TTraits::CopyLC(*aOld[i]); + User::LeaveIfError(aNew.Append(item)); + CleanupStack::Pop(item); + } +} + +// ----------------------------------------------------------------------------- +// ExternalizePointerArrayL +// ----------------------------------------------------------------------------- +// +template +void ExternalizePointerArrayL(const RPointerArray& aArray, + RWriteStream& aStream) +{ + aStream.WriteInt32L(aArray.Count()); + for (TInt i = 0; i < aArray.Count(); ++i) + { + TTraits::WriteToStreamL(*aArray[i], aStream); + } +} + +// ----------------------------------------------------------------------------- +// InternalizePointerArrayL +// ----------------------------------------------------------------------------- +// +template +void InternalizePointerArrayL(RPointerArray& aArray, RReadStream& aStream) +{ + TInt count = aStream.ReadInt32L(); + for (TInt i = 0; i < count; ++i) + { + T* item = TTraits::ReadFromStreamLC(aStream); + User::LeaveIfError(aArray.Append(item)); + CleanupStack::Pop(item); + } +} + +// ----------------------------------------------------------------------------- +// PointerArraySizeForStreamingL +// ----------------------------------------------------------------------------- +// +template +TInt PointerArraySizeForStreamingL(const RPointerArray& aArray) +{ + TInt size = sizeof(TInt32); + for (TInt i = aArray.Count(); 0 < i;) + { + size += TTraits::SizeForStreamingL(*aArray[--i]); + } + return size; +} + +///////////////////////////////////////////////////////////////////// +// RArray utilities +///////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CopyArrayL +// ----------------------------------------------------------------------------- +// +template +void CopyArrayL(RArray& aNew, const RArray& aOld) +{ + for (TInt i = 0; i < aOld.Count(); ++i) + { + User::LeaveIfError(aNew.Append(aOld[i])); + } +} + +// ----------------------------------------------------------------------------- +// ExternalizeArrayL +// ----------------------------------------------------------------------------- +// +template +void ExternalizeArrayL(const RArray& aArray, RWriteStream& aStream) +{ + aStream.WriteInt32L(aArray.Count()); + for (TInt i = 0; i < aArray.Count(); ++i) + { + aStream.WriteL(TPckgC(aArray[i])); + } +} + +// ----------------------------------------------------------------------------- +// InternalizeArrayL +// ----------------------------------------------------------------------------- +// +template +void InternalizeArrayL(RArray& aArray, RReadStream& aStream) +{ + TInt count = aStream.ReadInt32L(); + for (TInt i = 0; i < count; ++i) + { + T item; + TPckg itemPckg(item); + aStream.ReadL(itemPckg); + User::LeaveIfError(aArray.Append(item)); + } +} + +// ----------------------------------------------------------------------------- +// ArraySizeForStreamingL +// ----------------------------------------------------------------------------- +// +template +TInt ArraySizeForStreamingL(const RArray& aArray) +{ + return sizeof(TInt32) + aArray.Count() * sizeof(T); +} +