--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/mdcserializationbuffer.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,544 @@
+/*
+* Copyright (c) 2009 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: Serialize and deserialize data between client and server
+*
+*/
+
+#ifndef __MDCSERIALIZATIONBUFFER_H__
+#define __MDCSERIALIZATIONBUFFER_H__
+
+// INCLUDE FILES
+#include <e32base.h>
+#include "mdscommoninternal.h"
+
+class TMdCSerializationType;
+
+typedef TUint16 TSerializedDesLength;
+
+const TUint8 KPadding8 = 0xBD;
+const TInt32 KSerializedDesMaxLength = KMaxTUint16;
+const TUint32 KNoOffset = 0;
+
+/**
+* An automatic serializtion buffer class.
+* The class provides insertion functionality for multiple variable types.
+*/
+NONSHARABLE_CLASS(CMdCSerializationBuffer): public CBase
+ {
+ public:
+
+ #ifndef _DEBUG
+ const static TUint32 KRequiredSizeForTypeCheck = 0;
+ #else
+ const static TUint32 KRequiredSizeForTypeCheck = sizeof( TUint16 );
+ #endif
+
+ const static TUint32 KRequiredSizeForTBool = sizeof( TInt32 ) + 2*KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTInt8 = sizeof( TInt16 ) + 2*KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTUint8 = sizeof( TUint16 ) + 2*KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTInt16 = sizeof( TInt16 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTUint16 = sizeof( TUint16 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTInt32 = sizeof( TInt32 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTUint32 = sizeof( TUint32 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTInt64 = sizeof( TInt64 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTReal32 = sizeof( TReal32 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTReal64 = sizeof( TReal64 ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTTime = sizeof( TInt64 ) + KRequiredSizeForTypeCheck;
+
+ // artificial types
+ const static TUint32 KRequiredSizeForTItemId = sizeof( TItemId ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTDefId = sizeof( TDefId ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForEmptyText = sizeof( TSerializedDesLength ) + KRequiredSizeForTypeCheck;
+ const static TUint32 KRequiredSizeForTMdCValueUnion = sizeof( TMdCValueUnion ) + KRequiredSizeForTypeCheck;
+
+ public: // public definitions
+ /**
+ * Returns required buffer size for given 8-bit descriptor
+ * @param aDes 8-bit descriptor
+ * @return required size for descriptor (descriptor's length is limited to KSerializedDesMaxLength)
+ */
+ IMPORT_C static TUint32 RequiredSize( const TDesC8& aDes );
+
+ /**
+ * Returns required buffer size for given 16-bit descriptor
+ * @param aDes 16-bit descriptor
+ * @return required size for descriptor (descriptor's length is limited to KSerializedDesMaxLength)
+ */
+ IMPORT_C static TUint32 RequiredSize( const TDesC16& aDes );
+
+ /**
+ * Static constructor
+ * @param aSize size of the buffer
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewL( TInt32 aSize );
+
+ /**
+ * Static constructor
+ * @param aSize size of the buffer
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewLC( TInt32 aSize );
+
+ /**
+ * Static constructor
+ * @param aBuffer pointer to the buffer
+ * @param aSize size of the buffer
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewL( TUint8* aBuffer, TInt32 aSize );
+
+ /**
+ * Static constructor
+ * @param aBuffer pointer to the buffer
+ * @param aSize size of the buffer
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewLC( TUint8* aBuffer, TInt32 aSize );
+
+ /**
+ * Static constructor
+ * @param aMessage received message
+ * @param aIndex index of wanted message
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewL(const RMessage2 &aMsg, TInt aIndex );
+
+ /**
+ * Static constructor
+ * @param aMessage received message
+ * @param aIndex index of wanted message
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewLC(const RMessage2 &aMsg, TInt aIndex);
+
+ /**
+ * Static constructor
+ * @param aBuffer buffer to copy data from
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewL( const CMdCSerializationBuffer& aBuffer );
+
+ /**
+ * Static constructor
+ * @param aBuffer buffer to copy data from
+ * @return buffer instance
+ */
+ IMPORT_C static CMdCSerializationBuffer* NewLC( const CMdCSerializationBuffer& aBuffer );
+
+
+
+ virtual ~CMdCSerializationBuffer();
+
+ /**
+ * Get pointer to serialized buffer.
+ * @return serialized buffer pointer
+ */
+ IMPORT_C TPtr8 Buffer() const;
+
+ /**
+ * Get pointer to serialized buffer.
+ * @return serialized buffer pointer
+ */
+ IMPORT_C TPtr8* BufferPtr() const;
+
+ /**
+ * Get pointer to serialized buffer.
+ * @return serialized buffer pointer
+ */
+ IMPORT_C const TPtr8* BufferConstPtr() const;
+
+ /**
+ * Return size of the buffer.
+ * @return size of the buffer
+ */
+ IMPORT_C TUint32 Size() const;
+
+ /**
+ * Change position of the serialized buffer.
+ * @param aPosition value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C void PositionL( TUint32 aPosition );
+
+ /**
+ * Get current position of the serialized buffer.
+ * @return current buffer position
+ */
+ IMPORT_C TUint32 Position() const;
+
+ /**
+ * Insert TBool value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TBool aValue);
+
+ /**
+ * Insert TInt8 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TInt8 aValue);
+
+ /**
+ * Insert TUint8 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TUint8 aValue);
+
+ /**
+ * Insert TInt16 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TInt16 aValue);
+
+ /**
+ * Insert TUint16 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TUint16 aValue);
+
+ /**
+ * Insert TInt32 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TInt32 aValue);
+
+ /**
+ * Insert TUint32 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TUint32 aValue);
+
+ /**
+ * Insert TUint value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TUint aValue);
+
+ /**
+ * Insert TInt64 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TInt64 aValue);
+
+ /**
+ * Insert TReal32 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TReal32 aValue);
+
+ /**
+ * Insert TReal64 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TReal64 aValue);
+
+ /**
+ * Insert TTime value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TTime aValue);
+
+ /**
+ * Insert TDesC8 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TDesC8& aValue);
+
+ /**
+ * Insert TDesC16 value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TDesC16& aValue);
+
+ /**
+ * Insert TMdCValueUnion value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TMdCValueUnion& aValue);
+
+ /**
+ * Insert TMdCSerializationType value to serialized buffer and move buffer's position
+ * to after inserted value.
+ * @param aValue value to be insert to current position
+ * @param aSize size of value
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 InsertL(TMdCSerializationType& aValue, TUint32 aSize);
+
+ /**
+ * Receive TBool value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TBool& aDestination);
+
+ /**
+ * Receive TInt8 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TInt8& aDestination);
+
+ /**
+ * Receive TUint8 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TUint8& aDestination);
+
+ /**
+ * Receive TInt16 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TInt16& aDestination);
+
+ /**
+ * Receive TUint16 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TUint16& aDestination);
+
+ /**
+ * Receive TInt32 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TInt32& aDestination);
+
+ /**
+ * Receive TUint32 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TUint32& aDestination);
+
+ /**
+ * Receive TInt64 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TInt64& aDestination);
+
+ /**
+ * Receive TUint value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TUint& aDestination);
+
+ /**
+ * Receive TReal32 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TReal32& aDestination);
+
+ /**
+ * Receive TReal64 value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TReal64& aDestination);
+
+ /**
+ * Receive TTime value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TTime& aDestination);
+
+ /**
+ * Receive TMdCValueUnion value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TMdCValueUnion& aDestination);
+
+ /**
+ * Receive TMdCSerializationType value from serialized buffer's current position and
+ * move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @param aSize size of value
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TMdCSerializationType& aDestination, TUint32 aSize);
+
+ /**
+ * Receive the length of descriptor which is in the current position of
+ * the serialized buffer. (Current position of the buffer will not change.)
+ * @return the length of descriptor
+ */
+ IMPORT_C TSerializedDesLength ReceiveDesciptorLength() const;
+
+ /**
+ * Receive 8-bit descriptor value from serialized buffer's current
+ * position and move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TDes8& aDestination);
+
+ /**
+ * Receive 16-bit descriptor value from serialized buffer's current
+ * position and move buffer's position to after received value.
+ * @param aDestination value received from serialized buffer
+ * @return new buffer position
+ */
+ IMPORT_C TUint32 ReceiveL(TDes16& aDestination);
+
+ /**
+ * Receive 8-bit descriptor value from serialized buffer's current
+ * position and move buffer's position to after received value.
+ * @return descriptor buffer, which must be destroyed by receiver
+ */
+ IMPORT_C HBufC8* ReceiveDes8L();
+
+ /**
+ * Receive 16-bit descriptor value from serialized buffer's current
+ * position and move buffer's position to after received value.
+ * @return descriptor buffer, which must be destroyed by receiver
+ */
+ IMPORT_C HBufC16* ReceiveDes16L();
+
+ /**
+ * Receive pointer to 8-bit descriptor value from serialized buffer's
+ * current position and move buffer's position to after received value.
+ * @return descriptor pointer
+ */
+ IMPORT_C TPtrC8 ReceivePtr8L();
+
+ /**
+ * Receive pointer to 16-bit descriptor value from serialized buffer's
+ * current position and move buffer's position to after received value.
+ * @return descriptor pointer
+ */
+ IMPORT_C TPtrC16 ReceivePtr16L();
+
+ private:
+
+ /**
+ * Default constructor
+ */
+ CMdCSerializationBuffer();
+
+ /**
+ * 2nd phase constructor
+ * @param aInitialSize size of the buffer
+ */
+ void ConstructL( TInt32 aSize );
+
+ /**
+ * 2nd phase constructor
+ * @param aInitialSize pointer to the buffer
+ * @param aInitialSize size of the buffer
+ */
+ void ConstructL( TUint8* aBuffer, TInt32 aSize );
+
+ #ifdef _DEBUG
+ void InsertTypeL( TUint16 aType );
+ #define INSERTTYPE(A) InsertTypeL( (TUint16)A );
+
+ void CheckTypeL( TUint16 aType );
+ #define CHECKTYPE(A) CheckTypeL( (TUint16)A );
+
+ const TDesC& GetPropertyName( TUint16 aType );
+ #else
+ #define INSERTTYPE(A)
+ #define CHECKTYPE(A)
+ #endif
+
+ private:
+
+ /**
+ * The heap buffer
+ */
+ HBufC8* iHeapBuffer;
+
+ /**
+ * The pointer to buffer
+ */
+ TPtr8 iBuffer;
+
+ /**
+ * Current position of the buffer
+ */
+ TUint32 iPosition;
+ };
+
+
+/**
+ * definitions belongs to querycriteria(de)serialization
+ * files: mdsquerycriteriadeserialization.h, mdequerycriteriaserialization.h
+ */
+const TUint32 KOffsetResultMode = 0; // The begin of the buffer
+const TUint32 KOffsetQueryType = KOffsetResultMode + CMdCSerializationBuffer::KRequiredSizeForTInt32;
+const TUint32 KOffsetNamespaceDefId = KOffsetQueryType + CMdCSerializationBuffer::KRequiredSizeForTDefId;
+const TUint32 KOffsetObjectDefId = KOffsetNamespaceDefId + CMdCSerializationBuffer::KRequiredSizeForTDefId;
+const TUint32 KOffsetObjectDefsIds = KOffsetObjectDefId + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetLimit = KOffsetObjectDefsIds + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetOffset = KOffsetLimit + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetOptimizationFlags = KOffsetOffset + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetRootCondition = KOffsetOptimizationFlags + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetOrderRules = KOffsetRootCondition + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+const TUint32 KOffsetPropertyFilters = KOffsetOrderRules + CMdCSerializationBuffer::KRequiredSizeForTUint32;
+
+
+
+#endif // __MDCSERIALIZATIONBUFFER_H__