--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/inc/ncdkeyvaluemap.h Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2006 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: CNcdKeyValueMap declaration
+*
+*/
+
+
+#ifndef C_NCDKEYVALUEMAP_H
+#define C_NCDKEYVALUEMAP_H
+
+#include "e32base.h"
+
+class RWriteStream;
+class RReadStream;
+class CNcdKeyValuePair;
+
+/**
+* Map implementation
+*/
+class CNcdKeyValueMap : public CBase
+ {
+ public:
+
+ typedef TInt KeyValueIndex;
+
+ public:
+
+ /**
+ * Creator
+ */
+ static CNcdKeyValueMap* NewL();
+
+ /**
+ * Creator
+ */
+ static CNcdKeyValueMap* NewLC();
+
+
+ /**
+ * Copy constructor
+ */
+ static CNcdKeyValueMap* NewL( const CNcdKeyValueMap& aOther );
+
+ /**
+ * Cloner
+ */
+ CNcdKeyValueMap* CloneL() const;
+
+ /**
+ * Destructor
+ */
+ ~CNcdKeyValueMap();
+
+ public:
+
+ /**
+ * Adds a key-value pair
+ *
+ * @note Always adds a new pair even if the key already exists.
+ * ValueByKey and KeyExists -methods return the oldest instance of the key
+ *
+ * @param aKey Key name
+ * @param aValue Data
+ */
+ void AddL( const TDesC& aKey, const TDesC& aValue );
+
+
+ /**
+ * Adds a key-value pair.
+ *
+ * @note Always adds a new pair even if the key already exists.
+ * ValueByKey and KeyExists -methods return the oldest instance of the key
+ *
+ * @param aPair Pair to add. The ownership of the pair is transferred
+ * to the CNcdKeyValueMap if the operation is successful.
+ * @note If a leave occurs, it is the responsibility of the caller to
+ * delete the pair.
+ */
+ void AddL( CNcdKeyValuePair* aPair );
+
+
+
+ /**
+ * Adds a new or replaces an old key-value pair.
+ *
+ * If the key already exists, the old value is replaced with the new one
+ *
+ * @param aPair Pair to add. The ownership of the pair is transferred
+ * to the CNcdKeyValueMap if the operation is successful.
+ * @note If a leave occurs, it is the responsibility of the caller to
+ * delete the pair.
+ */
+ void ReplaceL( CNcdKeyValuePair* aPair );
+
+
+ /**
+ * Removes key-value pair.
+ *
+ * @note If the key exists more than once, then the oldest
+ * instance is removed.
+ *
+ * @param aKey Key
+ * @return KErrNotFound if the pair was not found
+ */
+ TInt Remove( const TDesC& aKey );
+
+
+ /**
+ * Returns an array of all key-value pairs
+ *
+ * @return Array of headers
+ */
+ RPointerArray<CNcdKeyValuePair>& Pairs();
+
+
+ /**
+ * Returns an array of all key-value pairs
+ *
+ * @return Array of headers
+ */
+ const RPointerArray<CNcdKeyValuePair>& Pairs() const;
+
+
+ /**
+ * Searches for the value that matches the key
+ *
+ * @param aPair Wanted key
+ * @return Header
+ * @exception KErrNotFound if a matching value was not found
+ */
+ const TDesC& ValueByKeyL( const TDesC& aKey ) const;
+
+
+ KeyValueIndex KeyExists( const TDesC& aKey ) const;
+
+ const TDesC& ValueByIndex( const KeyValueIndex& aIndex ) const;
+
+
+ KeyValueIndex PairExists( const CNcdKeyValuePair& aPair ) const;
+
+
+ /**
+ * Deletes all key-value pairs
+ */
+ void ResetAndDestroy();
+
+
+ /**
+ * Resets the array but doesn't delete the pairs
+ */
+ void Reset();
+
+
+ /**
+ * Appends a map.
+ *
+ * Simply appends key-value -pairs from the given map to this
+ * map. No key collision checks are made.
+ *
+ * @param aMap Map
+ */
+ void AppendL( const CNcdKeyValueMap& aMap );
+
+
+ /**
+ * Externalizes the map
+ *
+ * @param aStream Target stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ /**
+ * Externalizes the map to a RBuf8
+ *
+ * @param aTarge Target buffer.
+ */
+ void ExternalizeL( RBuf8& aTarget ) const;
+
+ /**
+ * Internalizes the map
+ *
+ * @param aStream Source stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+
+ private:
+
+ /**
+ * Constructor
+ */
+ CNcdKeyValueMap();
+
+ /**
+ * Copy constructor
+ */
+ CNcdKeyValueMap( const CNcdKeyValueMap& aOther );
+
+ /**
+ * 2nd phase copy constructor
+ */
+ void ConstructL( const CNcdKeyValueMap& aOther );
+
+ private:
+
+ /**
+ * Searches for the pair that matches the key in the given
+ * pair
+ *
+ * @param aPair Key-value pair that has the wanted key set
+ * @return A value
+ * @note aPair is popped from the Cleanupstack and deleted
+ * @exception KErrNotFound if a matching header was not found
+ */
+ const TDesC& FindValueL( CNcdKeyValuePair* aPair ) const;
+
+
+ private:
+
+ RPointerArray<CNcdKeyValuePair> iPairs;
+
+ };
+
+#endif // C_NCDKEYVALUEMAP_H
\ No newline at end of file