diff -r 000000000000 -r 4e91876724a2 photosgallery/viewframework/medialists/inc/glxcache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/medialists/inc/glxcache.h Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2008-2009 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: Cache implementation for media items sharing the same Id space +* +*/ + + + + +#ifndef C_GLXCACHE_H +#define C_GLXCACHE_H + +#include + +#include "glxmediaid.h" + +// Forward declarations +class CMPXMedia; +class CGlxMedia; +class T_CacheTestHelpers; +class TMPXAttribute; +class CGlxCacheManager; + +/** + * CGlxCache + * + * Individual cache of media items sharing the same Id space + */ +NONSHARABLE_CLASS( CGlxCache ) : public CBase + { +public: + /** + * Constructor + * @param aIdSpaceId The id of the id address space of this cache + * @param aCacheManager Instance of cachemanager to cleanup the media + */ + CGlxCache( const TGlxIdSpaceId& aIdSpaceId, CGlxCacheManager* aCacheManager ); + + /** + * Destructor + */ + ~CGlxCache(); + + /** + * Returns the Id space covered by this cache + * @return The Id space covered by this cache + */ + TGlxIdSpaceId IdSpaceId() const; + + /** + * Notify the cache that attributes have changed on media item(s) + * @param aMedia The updated media item or array of updated media items + */ + void MediaUpdatedL( const CMPXMedia& aMedia ); + + /** + * Update media item + * + * @param aMedia The updated media item + */ + void UpdateMediaL( const CMPXMedia& aMedia ); + + /** + * Cleanup the media of the given media id: broadcast this to all observers + * @param aMediaId The media id of the item + */ + void CleanupMedia(const TGlxMediaId& aMediaId); + + /** + * Handles modifications of item in cache + * + * @param aId Media item id + * @param aAttributes Attributes that have been modified + */ + void HandleItemModified( const TGlxMediaId& aId, const RArray& aAttributes ); + + /** + * Access to the items stored in the cache: return the item matching the given media Id + * @param aId The media Id + * @return The media item, or NULL if not found + */ + CGlxMedia* Media( const TGlxMediaId& aId ) const; + + /** + * Access to the items stored in the cache: return the item matching the given media Id. + * If not found, a new item is created + * @param aId The media Id + * @return The media item + */ + CGlxMedia* FindItemForceCreateL( const TGlxMediaId& aId ); + + /** + * Number of items in cache + * @return Number of items in cache + */ + TInt Count(); + + /** + * Cached item by index + * @param aIndex index of the item + * @return Cached item + */ + CGlxMedia& Media( TInt aIndex ); + + /** + * Delete an item at index from the cache. + * @param aIndex Index of the item to delete + */ + void Delete( TInt aIndex ); + + /** + * Reserve space for a number of users, for all items in the cache + * + * @param aCount The number of users to reserve space for + */ + void ReserveUsersL( TInt aCount ); + + /** + * Finds the media index present in cache + * @returns the index of media + */ + TInt FindMediaIndexInCache(TGlxMediaId aMediaId); + +private: + /** + * Copy the new and modified attributes from aSource to aTarget + * @param aTarget The target media item + * @param aSource The source media item + * @param aNewAttributes The new and modified attributes + */ + void CopyNewAndModifiedL( CGlxMedia& aTarget, const CMPXMedia& aSource, + RArray& aNewAttributes ); + + /** + * Function for TLinearOrder() for comparing two CGlxMedias + * Used from ordering the iItemPool by id + * @param aItem1 The first item to compare + * @param aItem2 The second item to compare + * @return -1 if aItem1 < aItem2; 1 if aItem1 > aItem2; 0 if aItem1 == aItem2 + */ + static TInt MediaItemOrderById( const CGlxMedia& aItem1, const CGlxMedia& aItem2 ); + + /** + * Function for comparing a TGlxMediaId with a CGlxMedia + * Used from ordering iItemPool by media id + * @param aMediaId The media id to compare against aItem2 + * @param aItem2 The second item to compare + * @return -1 if aMediaId < aItem2.Id(); 1 if aMediaId > aItem2.Id(); 0 if aMediaId == aItem2.Id() + */ + static TInt MediaItemOrderByKey( const TGlxMediaId* aMediaId, const CGlxMedia& aItem2 ); + + /** + * Create and add an item to the item pool + * @param aId Id for the new item + * @return Pointer to the created item + */ + CGlxMedia* CreateItemL( const TGlxMediaId& aId ); + +private: + /// Id space that this cache covers + TGlxIdSpaceId iIdSpaceId; + + /// Pool of media items. Owned + RPointerArray iItemPool; + + ///Instance of cacheManager to cleanup cache + CGlxCacheManager* iCacheManager; + + friend class T_CacheTestHelpers; + }; + +#endif // C_GLXCACHE_H