diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdkeyvaluemap.h --- /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& Pairs(); + + + /** + * Returns an array of all key-value pairs + * + * @return Array of headers + */ + const RPointerArray& 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 iPairs; + + }; + +#endif // C_NCDKEYVALUEMAP_H \ No newline at end of file