--- /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 <e32base.h>
+
+#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<TAttribute> iAttributes;
+ };
+
+
+#endif // M_NCDATTRIBUTES_H