--- /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 <e32base.h>
+
+#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<TMPXAttribute>& 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<TMPXAttribute>& 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<CGlxMedia> iItemPool;
+
+ ///Instance of cacheManager to cleanup cache
+ CGlxCacheManager* iCacheManager;
+
+ friend class T_CacheTestHelpers;
+ };
+
+#endif // C_GLXCACHE_H