--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/msvsearchsortdeltacache.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,135 @@
+// 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:
+//
+
+#include "msvsearchsortdeltacache.h"
+#include "MSVPANIC.H"
+
+
+CMsvSearchSortDeltaCache* CMsvSearchSortDeltaCache::iMsvSearchSortDeltaCache =NULL;
+
+/**
+* CMsvSearchSortDeltaCache()
+*
+*/
+
+CMsvSearchSortDeltaCache::CMsvSearchSortDeltaCache()
+ {
+ iNewEntry.Reset();
+ iUpdateEntry.Reset();
+ iDeleteEntry.Reset();
+ }
+
+/**
+* ~CMsvSearchSortDeltaCache()
+*
+*/
+
+CMsvSearchSortDeltaCache::~CMsvSearchSortDeltaCache()
+ {
+ iDeleteEntry.Close();
+ iNewEntry.Close();
+ iUpdateEntry.Close();
+ iMsvSearchSortDeltaCache = NULL;
+ }
+
+
+ /**
+ * Instance()
+ *
+ * The function returns already created instance of
+ * this class to the caller. To create a new instance
+ * the caller should call CreateL(). If an instance of
+ * this object does not already exists, the function
+ * throws a panic EMsvFreePoolNotCreated in DEBUG mode.
+ */
+CMsvSearchSortDeltaCache* CMsvSearchSortDeltaCache::Instance()
+ {
+ __ASSERT_DEBUG(iMsvSearchSortDeltaCache!=NULL , PanicServer(EMsvSearchSortDeltaCacheNotCreated));
+ return iMsvSearchSortDeltaCache;
+ }
+
+
+/**
+ * CreateDeltaCacheL()
+ *
+ * The only way to create an object of this class.
+ * The function ensures that only one instance of
+ * the object is created. This is a static interface.
+ * The function is made private to ensure that only
+ * friend function can create instance of this class.
+ */
+CMsvSearchSortDeltaCache* CMsvSearchSortDeltaCache::CreateDeltaCacheL()
+ {
+ CMsvSearchSortDeltaCache* self = new (ELeave) CMsvSearchSortDeltaCache();
+ //Push object in to cleanup stack so that it
+ // will be handles properly incase of a leave.
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ //Pop from cleanupstack
+ CleanupStack::Pop(self);
+ iMsvSearchSortDeltaCache = self;
+ return self;
+ }
+
+
+/**
+ * ConstructL()
+ *
+ * The function is called from InstanceL() and used to
+ * initialize the instance of this class. It firsts reads
+ * cache configuration information from msgcache.ini file
+ * and stores them into member variable. It then allocates
+ * creates initial set of entries as described in conf file.
+ */
+void CMsvSearchSortDeltaCache::ConstructL()
+ {
+ }
+
+/**
+* EntryInDeltaCache()
+* Add three different type (New, Update, Delete) of entry in Delta Cache.
+* @param :aID :a TMsvId ;aType = a TMsgType
+* @return :TInt
+*/
+
+void CMsvSearchSortDeltaCache::EntryInDeltaCache(TMsvId aID,TMsgType aType)
+ {
+ if(aType == ENewMsg ) //New Msg Entry
+ {
+ iMsvSearchSortDeltaCache->iNewEntry.Append(aID);
+ iMsvSearchSortDeltaCache->iDeltaCacheDirtyFlag = ETrue;
+ }
+ // This conditional statement is required to check if any msg updation is going on while doing search or not.
+ // And if any TMsvId is alreday added it should not add it again.
+ else if(aType == EUpdatedMsg && !iIsHeaderSearchEnabled) //Updated msg Entry
+ {
+ //check if we already have aID in iNewEntry array list.
+ TInt foundPos = iMsvSearchSortDeltaCache->iNewEntry.Find(aID);
+
+ if( foundPos < 0 &&
+ iUpdateEntry.Find(aID) == KErrNotFound )
+ {
+ iMsvSearchSortDeltaCache->iUpdateEntry.Append(aID);
+ iMsvSearchSortDeltaCache->iDeltaCacheDirtyFlag = ETrue;
+ }
+
+ }
+ else if(aType == EDeletedMsg) //Deleted msg Entry.
+ {
+ iMsvSearchSortDeltaCache->iDeleteEntry.Append(aID);
+ iMsvSearchSortDeltaCache->iDeltaCacheDirtyFlag = ETrue;
+ }
+ }
+