diff -r 000000000000 -r f979ecb2b13e pimappservices/calendar/server/inc/agsindex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimappservices/calendar/server/inc/agsindex.h Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,185 @@ +// Copyright (c) 1997-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: +// + +#ifndef __AGSINDEX_H__ +#define __AGSINDEX_H__ + +#include "agsindexbase.h" +#include +#include "agsextractor.h" + +// -------------------------------- Local classes ------------------------------ + +class CAgnEntry; +class CAgnEntryNonRptIndex; +class CAgnEntryRptIndex; +class CAgnSimpleEntry; +class CAgnSimpleEntryAllocator; +class CAgnSimpleEntryTable; +class CAgnTodoNonRptIndex; +class CAgnTodoRptIndex; +class CAgnLocalUidIndex; +class CGsGuidHashIndex; +class TAgnFilter; +class TAgnInstanceExtractorBase; +class TAgnKeyEntryInfo; +class CAgnTzRuleIndex; + +// -------------------------------- Referenced classes-------------------------- + +class CAgnEntryModel; + +//-------------------------------- CAgnEntryNonRptIndex----------------------------- +// +class CAgnEntryNonRptIndex : public CAgnIndex + { +public: + static CAgnEntryNonRptIndex* NewL(MAgnCalendarTimeMode::TTimeMode aTimeMode); + + // from CAgnIndex + TBool IsValid(const CAgnSimpleEntry* aEntry) const; +private: + CAgnEntryNonRptIndex(MAgnCalendarTimeMode::TTimeMode aTimeMode); +private: + TAgnKeyStartDate iKey; + }; +//-------------------------------- CAgnEntryRptIndex----------------------------- +// +class CAgnEntryRptIndex : public CAgnIndex + { +public: + static CAgnEntryRptIndex* NewL(MAgnCalendarTimeMode::TTimeMode aTimeMode); + + // from CAgnIndex + TBool IsValid(const CAgnSimpleEntry* aEntry) const; +private: + CAgnEntryRptIndex(MAgnCalendarTimeMode::TTimeMode aTimeMode); +private: + TAgnKeyRptDate iKey; + }; + +//-------------------------------- CAgnTodoNonRptIndex ------------------------- +class CAgnTodoNonRptIndex : public CAgnIndex + { +public: + static CAgnTodoNonRptIndex* NewL(MAgnCalendarTimeMode::TTimeMode aTimeMode); + + // from CAgnIndex + TBool IsValid(const CAgnSimpleEntry* aEntry) const; + TBool FirstL(TTime& aKeyValue, TInt& aPos) const; + TBool NextL(TTime& aKeyValue, TInt& aPos) const; +private: + CAgnTodoNonRptIndex(MAgnCalendarTimeMode::TTimeMode aTimeMode); +private: + TAgnKeyTodoNonRptDate iKey; + }; + +//-------------------------------- CAgnTodoRptIndex----------------------------- +// +class CAgnTodoRptIndex : public CAgnIndex + { +public: + static CAgnTodoRptIndex* NewL(MAgnCalendarTimeMode::TTimeMode aTimeMode); + + // from CAgnIndex + TBool IsValid(const CAgnSimpleEntry* aEntry) const; +private: + CAgnTodoRptIndex(MAgnCalendarTimeMode::TTimeMode aTimeMode); +private: + TAgnKeyRptDate iKey; + }; + +//-------------------------------- CAgnSimpleEntryTable -------------------------- + +class CAgnSimpleEntryTable : public CBase + { + // friend classes for iterating through entries + friend class TAgnEntryDateIterator; + +public: + + enum TAgnSimpleEntryIndex + { + EAgnEntryNonRptFixedIndex, + EAgnEntryRptFixedIndex, + EAgnTodoNonRptFixedIndex, + EAgnTodoRptFixedIndex, + EAgnEntryNonRptFloatingIndex, + EAgnEntryRptFloatingIndex, + EAgnTodoNonRptFloatingIndex, + EAgnTodoRptFloatingIndex, + EAgnMaxIndex, + }; + + static CAgnSimpleEntryTable* NewL(CAgnEntryModel& aEntryModel); + ~CAgnSimpleEntryTable(); + + void AddEntryL(const CAgnEntry& aEntry); + void DeleteEntry(const TAgnEntryId& aId); + + void Commit(); + void Reset(); // clear all entries from indices + + CAgnSimpleEntry* GetEntry(const TAgnEntryId& aEntryId) const; + CAgnSimpleEntry* GetEntry(TCalLocalUid aUniqueId) const; + + void FindByLastModifiedDateUtcL(const TTime& aLastModifiedDateUtcFilter, + RArray& aFoundIdList) const; + void FindByHashL(const TUint32& aGuidHash, RArray& aFoundIdList) const; + + void GetFilteredIndexListL(RArray& aIndexList,const TAgnFilter& aFilter) const; + CAgnInstanceExtractor* GetExtractor(TInt aEntryIndex,MAgnCalendarTimeMode::TTimeMode aTimeMode, const TAgnFilter& aFilter, const TTime& aUndatedTodoTime); + + void InternalizeL(RReadStream& aReadStream, CAgnTzRuleIndex* aTzRuleIndex); + void ExternalizeL(RWriteStream& aWriteStream) const; + +private: + + // constructor + CAgnSimpleEntryTable(CAgnEntryModel& aAgnEntryModel); + void ConstructL(); + + void AddEntryL(CAgnSimpleEntry* aSimpleEntry); + // Delete entry + void DeleteEntryFromIndexes(CAgnSimpleEntry* aEntry); + + TBool Find(const TAgnEntryId& aId, TInt& aPos) const; + + static TInt CompareEntries(const CAgnSimpleEntry& aLeft, const CAgnSimpleEntry& aRight); + + CAgnIndex* Index(TInt aIndex) const; + CAgnIndex* EntryNonRptIndex(const MAgnCalendarTimeMode::TTimeMode aTimeMode) const; + CAgnIndex* EntryRptIndex(const MAgnCalendarTimeMode::TTimeMode aTimeMode) const; + CAgnIndex* TodoNonRptIndex(const MAgnCalendarTimeMode::TTimeMode aTimeMode) const; + CAgnIndex* TodoRptIndex(const MAgnCalendarTimeMode::TTimeMode aTimeMode) const; + + RPointerArray iIndexes; + RPointerArray iArray; + CAgnSimpleEntry* iFindEntry; + CAgnSimpleEntryAllocator* iSimpleEntryAllocator; + + CAgnInstanceExtractor* iNonRptExtractor; + CAgnInstanceExtractor* iRptExtractor; + CAgnInstanceExtractor* iTodoNonRptExtractor; + CAgnInstanceExtractor* iTodoRptExtractor; + + CAgnLocalUidIndex* iLocalUidIndex; + CGsGuidHashIndex* iGuidHashIdIndex; + CAgnEntryModel* iOwningModel; // the entry model that owns this table + // used for updating the cached index + + }; + +#endif