phonebookengines/VirtualPhonebook/VPbkEng/src/RVPbkContactFieldDefaultPriorities.cpp
changeset 0 e686773b3f54
--- /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 <RVPbkContactFieldDefaultPriorities.h>
+#include <VPbkError.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// 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