diff -r 000000000000 -r c53acadfccc6 inc/mdcserializationbuffer.h --- /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 +#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__