diff -r 000000000000 -r a2952bb97e68 mpx/collectionframework/collectionengine/inc/mpxcollectioncache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/collectionframework/collectionengine/inc/mpxcollectioncache.h Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,184 @@ +/* +* Copyright (c) 2007 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: Generic collection cache +* +*/ + + +#ifndef MPXCOLLECTIONCACHE_H +#define MPXCOLLECTIONCACHE_H + +// INCLUDES +#include +#include +#include + +// CLASS FORWARDS +class CMPXMedia; +class CMPXCollectionPath; +class TMPXAttribute; +class CMPXCollectionCacheNode; + +/** +* The collection cache stores information already retrieved by clients so it can be +* returned immediately if requested again. The information is stored in a tree +* structure, where each tree node corresponds to a path node. When information is +* requested, the path is mapped against the tree and if a corresponding node exists the +* results are returned from cache. +* +* The cache can be limited in size, if the client defines a maximum size, lower priority +* nodes are discarded to make room for new information. The criteria considered when +* discarding nodes include: priority value (specified by the client), path level and +* time of addition. +* +* @lib mpxcollectionengine.lib (not exported) +*/ +NONSHARABLE_CLASS(CMPXCollectionCache) : + public CBase + { +public: + /** + * Two-phased constructor. + * @param aMaximumSizeRatio maximum cache size in percentage ratio + * If not specified the cache does not have a limit + * @return Constructed object + */ + static CMPXCollectionCache* NewL(TInt aMaximumSizeRatio = -1); + + /** + * Destructor + */ + virtual ~CMPXCollectionCache(); + +public: + /** + * Cache entry priority values. Entries with lower priority will be discarded + * sooner than the ones with higher priority. + */ + enum TCachePriority + { + EPriorityLow, + EPriorityNormal, + EPriorityHigh + }; + +public: + /** + * Adds a result set to the cache. + * @param aPath path defining the context of the results. + * @param aAttrs attributes requested by the client application and included in + * the result set. + * @param aResults result set corresponding to the path. Not owned. + * @param aNotCacheableAttrs attributes that are not cacheable + * @param aMediaFromOpenL whether or not this media was from an OpenL + * @param aPriority result set priority + * @return CMPXMedia object in the cache or the original object if add failed + */ + CMPXMedia* AddL( + const CMPXCollectionPath& aPath, + const TArray& aAttrs, + CMPXMedia& aResults, + TBool aMediaFromOpenL = EFalse, + TCachePriority aPriority = EPriorityNormal ); + + /** + * Returns the information corresponding to the specified path and attribute set + * if available in the cache. + * @param aPath path defining the information context. + * @param aAttrs attribute set requested by the client. + * @return Valid results or NULL if the path/attribute set specified cannot be + * found in the cache. + */ + CMPXMedia* GetL( + const CMPXCollectionPath& aPath, + const TArray& aAttrs, + TBool aMediaFromOpenL = EFalse ); + + /** + * Removes the specified path and all its children from the cache. + * @param aPath path defining the context to be removed. + */ + void RemoveL(const CMPXCollectionPath& aPath); + + /** + * Resets cache and removes all nodes + */ + void Reset(); + + /** + * Handle some change from the collection + * @param aCollectionId collectoin that the change is comming from + * @param aChangeItemId item ID of the changed event + */ + void HandleChangeL( TUid aCollectionId, TMPXItemId aChangeItemId ); + +private: + + /** + * C++ constructor + * @param aMaximumSizeKb maximum cache size in percentage ratio. + */ + CMPXCollectionCache(TInt aMaximumSizeRatio); + + /** + * 2nd phase contructor + */ + void ConstructL(); + + /** + * Returns the cache node corresponding to the specified path. + * @param aPath path to be looked up in the cache. + * @param aCreateNodes if ETrue all the missing nodes for the specified + * path will be created if they do not already exist. If EFalse + * the method returns NULL if corresponding node is not found. + * @return valid cache node if found or created, NULL if not found. + */ + CMPXCollectionCacheNode* NodeFromPathL(const CMPXCollectionPath& aPath, + TBool aCreateNodes = EFalse); + + /** + * Removes a specified node and all its children from the cache. + * @param aNode node to be removed. Ownership is transferred. + */ + void RemoveNode(CMPXCollectionCacheNode* aNode); + + /** + * Checks the memory condition and clears cache to free some memory + * maximum percentage ratio specified in the constructor is used to detect + * low memory condition + * @return EFalse if low memory condition detected, ETrue otherwise + */ + TBool ManageCacheSizeL(); + +#ifdef _DEBUG + /** + * Prints the cache tree. + */ + void PrintTree( TBool aPrintAtts = EFalse ); +#endif + +private: + /** + * Root node for the cache tree, created when the cache is created. + */ + CMPXCollectionCacheNode* iRoot; + + /** + * Maximum size of the cache in percentage ratio, specified by the client. + */ + TInt iMaximumSizeRatio; + }; + +#endif // MPXCOLLECTIONCACHE_H +