diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdattributes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdattributes.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,239 @@ +/* +* Copyright (c) 2006-2008 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: Definition of ncdattributes interface and +* implementation class. +* +*/ + + +#ifndef C_NCDATTRIBUTES_H +#define C_NCDATTRIBUTES_H + + +#include + +#include "ncdpanics.h" + +class RWriteStream; +class RReadStream; + +/** + * Simple attribute container + * + * Used for setting, getting, storing and loading simple + * attributes. Currently supports 16-bit descriptors and TInt32 + */ +class CNcdAttributes : public CBase + { +public: + + /** + * Types of supported attributes + */ + enum TAttributeType + { + /** + * Attribute type is not set + */ + EAttributeTypeUndefined = 0, + + /** + * Attribute is TInt32 + */ + EAttributeTypeInt32, + + /** + * Attribute is a 16-bit descriptor + */ + EAttributeTypeString16 + }; + +public: + + /** + * @param aUpperLimit Upper attribute limit is NOT included in the range. Must be >= 0 and > aLowerLimit + * + */ + IMPORT_C static CNcdAttributes* NewL( TInt aUpperLimit, TInt aLowerLimit = 0 ); + + /** + * @note If given upperlimit differs from the one read from the stream then + * the attribute range is adjusted for the given limit. + * @leave KErrArgument if aLowerLimit differs from the lower limit read from the stream + */ + IMPORT_C static CNcdAttributes* NewL( + RReadStream& aStream, + TInt aUpperLimit, + TInt aLowerLimit = 0 ); + + /** + * Copy constructor + */ + IMPORT_C static CNcdAttributes* NewL( const CNcdAttributes& aAttributes ); + + + /** + * Destructor + */ + IMPORT_C virtual ~CNcdAttributes(); + +public: + + /** + * Lower limit getter + */ + IMPORT_C TInt RangeLowerLimit() const; + + /** + * Upper limit getter + */ + IMPORT_C TInt RangeUpperLimit() const; + + /** + * TInt32 attribute setter + * + * @param aAttribute Attribute + * @param aValue Value + * @panic ENcdPanicIndexOutOfRange if aAttribute is not + * RangeLowerLimit() <= aAttribute < RangeUpperLimit() + * @panic ENcdPanicInvalidArgument if the attribute type is not + * EAttributeTypeInt32 or EAttributeTypeUndefined + */ + IMPORT_C void SetAttributeL( TInt aAttribute, TInt32 aValue ); + + /** + * 16-bit descriptor attribute setter + * + * @param aAttribute Attribute + * @param aValue Value + * @leave KErrNoMemory if memory runs out + * @panic ENcdPanicIndexOutOfRange if aAttribute is not + * RangeLowerLimit() <= aAttribute < RangeUpperLimit() + * @panic ENcdPanicInvalidArgument if the attribute type is not + * EAttributeTypeString16 or EAttributeTypeUndefined + */ + IMPORT_C void SetAttributeL( TInt aAttribute, const TDesC& aValue ); + + /** + * 16-bit descriptor attribute getter + * + * @param aAttribute Attribute + * @return Value of the attribute + * @panic ENcdPanicIndexOutOfRange if aAttribute is not + * RangeLowerLimit() <= aAttribute < RangeUpperLimit() + * @panic ENcdPanicInvalidArgument if the attribute type is not + * EAttributeTypeString16 + */ + IMPORT_C const TDesC& AttributeString16( TInt aAttribute ) const; + + + /** + * TInt32 attribute getter + * + * @param aAttribute Attribute + * @return Value of the attribute + * @panic ENcdPanicIndexOutOfRange if aAttribute is not + * RangeLowerLimit() <= aAttribute < RangeUpperLimit() + * @panic ENcdPanicInvalidArgument if the attribute type is not + * EAttributeTypeInt32 + */ + IMPORT_C TInt32 AttributeInt32( TInt aAttribute ) const; + + + /** + * Attribute type getter + * + * @param aAttribute + * @return Attribute type + * @panic ENcdPanicIndexOutOfRange if aAttribute is not + * RangeLowerLimit() <= aAttribute < RangeUpperLimit() + */ + IMPORT_C TAttributeType AttributeType( TInt aAttribute ) const; + +public: + + IMPORT_C void ExternalizeL( RWriteStream& aStream ) const; + IMPORT_C void InternalizeL( RReadStream& aStream ); + +protected: + + // Union that contains all possible attribute types + union TAttributeUnion + { + HBufC* iString16; + TInt32 iInt32; + }; + + // Attribute + struct TAttribute + { + TAttributeType iType; + TAttributeUnion iAttribute; + + TAttribute() : iType( EAttributeTypeUndefined ) + { + iAttribute.iString16 = NULL; + } + }; + + +protected: + + CNcdAttributes( TInt aUpperLimit, TInt aLowerLimit ); + void ConstructL(); + void ConstructL( const CNcdAttributes& aAttributes ); + + // Deletes all attributes, array size is reduced to 0 + void ClearAttributes(); + + // Deletes all attributes and resets the array to have + // room for the attribute range, array size == ArraySize() + void ResetAttributesL(); + + // Size needed for containing the attribute range + TInt ArraySize() const; + + + // Attribute externalization and internalization + void ExternalizeAttributeL( + const TAttribute& aAttribute, RWriteStream& aStream ) const; + + TAttribute InternalizeAttributeL( RReadStream& aStream ) const; + + // Deletes attribute's internals + void DeleteAttribute( TAttribute& aAttribute ); + + // Copies attribute's internals and returns the copy + TAttribute CopyAttributeL( const TAttribute& aAttribute ) const; + + // Indexing methods + const TAttribute& Attribute( TInt aAttribute ) const; + TAttribute& Attribute( TInt aAttribute ); + +private: + + CNcdAttributes( const CNcdAttributes& ); + CNcdAttributes& operator=( const CNcdAttributes& ); + +private: + + TInt iLowerLimit; + TInt iUpperLimit; + + // Attribute array + RArray iAttributes; + }; + + +#endif // M_NCDATTRIBUTES_H