// AGMUIDX.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//


#if !defined(__AGMUIDX_H__)
#define __AGMUIDX_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__AGMXENTR_H__)
#include "agmxentr.h"
#endif

#if !defined(__AGMIDS_H__)
#include "agmids.h"
#endif

#if !defined(__AGMENTRY_H__)
#include "agmentry.h"
#endif


///////////////////
// TAgnUniqueIdEntryIdPair
class TAgnUniqueIdEntryIdPair
	{
	// Stores a pair of entry / unqique ID's
public:
	inline TAgnUniqueIdEntryIdPair() {};
	inline TAgnUniqueIdEntryIdPair(TAgnUniqueId aUniqueId, TAgnEntryId aEntryId);
	inline TAgnUniqueId UniqueId();
	inline TAgnEntryId EntryId();
private:
	TAgnUniqueId iUniqueId;
	TAgnEntryId iEntryId;
public:
	TBool iHasBeenDeleted;
	TAgnDateTime iLastChangedDate;
	CAgnEntry::TType iType;
	};


///////////////////
// TAgnTodoListIdEntryIdPair
class TAgnTodoListIdEntryIdPair
	{
	// Stores a pair of entry / unqique ID's
public:
	inline TAgnTodoListIdEntryIdPair() {};
	inline TAgnTodoListIdEntryIdPair(TAgnUniqueId aUniqueId, TAgnTodoListId aTodoListId);
	inline TAgnUniqueId UniqueId();
	inline TAgnTodoListId TodoListId();
private:
	TAgnUniqueId iUniqueId;
	TAgnTodoListId iTodoListId;
	};


/////////////
// CAgnUniqueIdIndex

class CAgnUniqueIdIndex : public CBase
	{
public:
	static CAgnUniqueIdIndex* NewL();
	CAgnUniqueIdIndex();
	~CAgnUniqueIdIndex();
	void ConstructL();

	void AddL(TAgnUniqueId aUniqueId, CAgnEntry* aEntry);
	void Delete(TAgnUniqueId aUniqueId);
	void UpdateL(TAgnEntryId aOldEntryId, CAgnEntry* aEntry);
	TAgnEntryId Lookup(TAgnUniqueId aUniqueId);
	TAgnUniqueId Lookup(TAgnEntryId aEntryId);
	void Reset();
	CAgnEntry::TType TypeByUniqueId(TAgnUniqueId aUniqueId);
	TBool HasUniqueIdBeenDeleted(TAgnUniqueId aUniqueId);
	TAgnDateTime UniqueIdLastChangedDate(TAgnUniqueId aUniqueId);

	inline CArrayFixFlat<TAgnUniqueIdEntryIdPair>* Index();
private:
	TInt Index(TAgnUniqueId aUniqueId);
	TInt Index(TAgnEntryId aEntryId);
private:
	CArrayFixFlat<TAgnUniqueIdEntryIdPair>* iIdList;
	};



/////////////
// CAgnTodoListIdIndex

class CAgnTodoListIdIndex : public CBase
	{
public:
	static CAgnTodoListIdIndex* NewL();
	CAgnTodoListIdIndex();
	~CAgnTodoListIdIndex();
	void ConstructL();

	void AddL(TAgnUniqueId aUniqueId, TAgnTodoListId aTodoListId);
	void Delete(TAgnUniqueId aUniqueId);
	void UpdateL(TAgnTodoListId aOldTodoListId, TAgnTodoListId aNewTodoListId);
	TAgnTodoListId Lookup(TAgnUniqueId aGlobalId);
	TAgnUniqueId Lookup(TAgnEntryId aTodoId);
private:
	TInt Index(TAgnUniqueId aUniqueId);
	TInt Index(TAgnTodoListId aTodoListId);
private:
	CArrayFixFlat<TAgnTodoListIdEntryIdPair>* iIdList;
	};


// Inline functions

TAgnUniqueIdEntryIdPair::TAgnUniqueIdEntryIdPair(TAgnUniqueId aUniqueId, TAgnEntryId aEntryId)
:iUniqueId(aUniqueId), iEntryId(aEntryId)
	{
	}

TAgnUniqueId TAgnUniqueIdEntryIdPair::UniqueId()
	{ return iUniqueId;}

TAgnEntryId TAgnUniqueIdEntryIdPair::EntryId()
	{ return iEntryId;}


TAgnTodoListIdEntryIdPair::TAgnTodoListIdEntryIdPair(TAgnUniqueId aUniqueId, TAgnTodoListId aTodoListId)
:iUniqueId(aUniqueId), iTodoListId(aTodoListId)
	{
	}

TAgnUniqueId TAgnTodoListIdEntryIdPair::UniqueId()
	{ return iUniqueId;}

TAgnTodoListId TAgnTodoListIdEntryIdPair::TodoListId()
	{ return iTodoListId;}



inline CArrayFixFlat<TAgnUniqueIdEntryIdPair>* CAgnUniqueIdIndex::Index()
	{
	return iIdList;
	}


#endif
