--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/inc/CPbkEntryCache.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002 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:
+* Fixed-size cache of TPbkContactEntry instances
+*
+*/
+
+
+#ifndef __CPbkEntryCache_H__
+#define __CPbkEntryCache_H__
+
+// INCLUDES
+#include <TPbkContactEntry.h>
+#include <MPbkContactEntryLoader.h>
+
+// CLASS DECLARATION
+
+/**
+ * @internal Only Phonebook internal use supported!
+ *
+ * Fixed-size cache of TPbkContactEntry instances.
+ */
+class CPbkEntryCache :
+ public CBase, public MPbkContactEntryLoader
+ {
+ public:
+ /**
+ * Creates a new instance of this class.
+ * @param aEngine reference to phonebook engine
+ * @param aCapacity cache capacity
+ */
+ IMPORT_C static CPbkEntryCache* NewL(CPbkContactEngine& aEngine,
+ TInt aCapacity);
+
+ /**
+ * Destructor.
+ */
+ ~CPbkEntryCache();
+
+ /**
+ * Returns this cache's capacity.
+ */
+ IMPORT_C TInt Capacity() const;
+
+ /**
+ * Retrieves an entry aId from this cache or loads the
+ * entry from the DB if not currently present in the cache.
+ *
+ * @exception KErrNotFound if contact aId is not found in this cache
+ * or in contact DB.
+ */
+ IMPORT_C const TPbkContactEntry& GetEntryL(TContactItemId aId);
+
+ /**
+ * Preloads entry aId into this cache if not already present.
+ */
+ IMPORT_C void PreloadL(TContactItemId aId);
+
+ /**
+ * Unloads an entry aId from this cache.
+ */
+ IMPORT_C void Unload(TContactItemId aId);
+
+ /**
+ * Flushes the cache completely.
+ */
+ IMPORT_C void Flush();
+
+ /**
+ * Sets the entry loader from aContactEntryLoader.
+ */
+ inline void SetEntryLoader(MPbkContactEntryLoader&
+ aContactEntryLoader);
+
+ public: // Debug-only
+ #ifdef _DEBUG
+ /// Debug-only performance statistics for CPbkEntryCache
+ struct TPerfStats
+ {
+ /// Own: hit count (debug only)
+ TInt iHitCount;
+ /// Own: miss count (debug only)
+ TInt iMissCount;
+ } iPerfStats;
+ #endif
+
+ private: // from MPbkContactEntryLoader
+ void LoadEntryL
+ (TPbkContactEntry& aEntry,
+ CPbkContactEngine& aEngine,
+ TContactItemId aContactId);
+
+ private: // Implementation
+ struct TEntry
+ {
+ TDblQueLink iLink;
+ TPbkContactEntry iEntry;
+ };
+ CPbkEntryCache(CPbkContactEngine& aEngine);
+ void ConstructL(TInt aCapacity);
+ TPbkContactEntry* Find(TContactItemId aId);
+ void Touch(TEntry& aEntry);
+ TEntry* FindEntry(TContactItemId aId) const;
+ const TPbkContactEntry* DebugFind(TContactItemId aId) const;
+ void __DbgTestInvariant() const;
+
+ private: // Data
+ /// Own: double queue of entries
+ mutable TDblQue<TEntry> iEntryQueue;
+ /// Own: memory block for all the cache entries.
+ TEntry* iEntries;
+ /// Own: Capacity.
+ TInt iCapacity;
+ /// Ref: Phonebook engine.
+ CPbkContactEngine& iEngine;
+ /// Ref: Contact entry loader
+ MPbkContactEntryLoader* iEntryLoader;
+
+ private: // friend declarations
+ /// For testing only
+ friend class CPbkEntryCache_TestAccess;
+ };
+
+
+inline void CPbkEntryCache::SetEntryLoader
+ (MPbkContactEntryLoader& aContactEntryLoader)
+ {
+ iEntryLoader = &aContactEntryLoader;
+ }
+
+#endif // __CPbkEntryCache_H__
+
+// End of File