ncdengine/provider/server/inc/ncdkeyvaluemap.h
changeset 0 ba25891c3a9e
--- /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