diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkEng/src/RVPbkContactFieldDefaultPriorities.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/RVPbkContactFieldDefaultPriorities.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2004-2007 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 +#include +#include +#include + +// Priority array static data +namespace KPriorityArrayStatic + { + const TUint8 KArrayVersionNumber = 1; + } + +namespace KPriorityArrayExternalizeSizes + { + const TInt KVersionNumberSize = 1; + const TInt KElementCountSize = 1; + const TInt KElementSize = 1; + } + +namespace { + +TInt DoCalculateBufferSize(const RVPbkContactFieldDefaultPriorities& aPriorities) + { + TInt bufferSize = KPriorityArrayExternalizeSizes::KVersionNumberSize; + bufferSize += KPriorityArrayExternalizeSizes::KElementCountSize; + bufferSize += aPriorities.Count() * KPriorityArrayExternalizeSizes::KElementSize; + return bufferSize; + } + +void DoFillBuffer(RWriteStream& aWriteStream, + const RVPbkContactFieldDefaultPriorities& aPriorities) + { + // Write version number + aWriteStream.WriteUint8L(KPriorityArrayStatic::KArrayVersionNumber); + // Write array element count to the stream + aWriteStream.WriteUint8L(aPriorities.Count()); + + // Write each element to the stream + for (TInt i = 0; i < aPriorities.Count(); ++i) + { + aWriteStream.WriteUint8L(aPriorities.At(i)); + } + } + +} /// unnamed namespace + + +/** + * Default priority array pack format 1: + * stream := VersionNumber ElementCount Element* + * VersionNumber := TInt8 + * ElementCount := TInt8 + * Element := TInt8 + */ +EXPORT_C HBufC8* RVPbkContactFieldDefaultPriorities::ExternalizeLC() const + { + const TInt bufferSize = DoCalculateBufferSize(*this); + HBufC8* buffer = HBufC8::NewLC(bufferSize); + TPtr8 bufPtr(buffer->Des()); + RDesWriteStream writeStream(bufPtr); + writeStream.PushL(); + DoFillBuffer(writeStream, *this); + writeStream.CommitL(); + CleanupStack::PopAndDestroy(&writeStream); + return buffer; + } + +EXPORT_C void RVPbkContactFieldDefaultPriorities::InternalizeL + (const TDesC8& aBuffer) + { + iDefaultTypes.Reset(); + + RDesReadStream readStream(aBuffer); + readStream.PushL(); + + // Version number + const TInt vsn = readStream.ReadUint8L(); + __ASSERT_ALWAYS(vsn == KPriorityArrayStatic::KArrayVersionNumber, + VPbkError::Panic(VPbkError::EInvalidTypeParameter)); + + // Read count of elements + TInt count = readStream.ReadUint8L(); + + // Read elements + for (TInt i = 0; i < count; ++i) + { + TVPbkDefaultType type = (TVPbkDefaultType) readStream.ReadUint8L(); + User::LeaveIfError(iDefaultTypes.Append(type)); + } + + CleanupStack::PopAndDestroy(&readStream); + } + +// End of File