persistentstorage/store/UCONT/UC_SET.CPP
changeset 0 08ec8eefde2f
child 51 7d4490026038
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/store/UCONT/UC_SET.CPP	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,179 @@
+// Copyright (c) 1998-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 "UC_STD.H"
+
+EXPORT_C void TPagedSetToken::ExternalizeL(RWriteStream &aStream) const
+	{
+	__ASSERT_DEBUG(iCount>=0,User::Invariant());
+	TBtreeToken::ExternalizeL(aStream);
+	aStream.WriteInt32L(iCount);
+	}
+
+EXPORT_C void TPagedSetToken::InternalizeL(RReadStream &aStream)
+	{
+	TBtreeToken::InternalizeL(aStream);
+	iCount=aStream.ReadInt32L();
+	if (iCount<0)
+		__LEAVE(KErrCorrupt);
+	}
+
+EXPORT_C void TPagedSetToken::Clear()
+	{
+	TBtreeToken::Clear();
+	iCount=0;
+	}
+
+EXPORT_C TPagedSetBase::TPagedSetBase(TInt anEntrySize)
+//
+// Constructor creating a new set.
+//
+	: iTree(EBtreeSecure,anEntrySize,anEntrySize),iKey(anEntrySize),iCount(0)
+	{}
+
+EXPORT_C TPagedSetBase::TPagedSetBase(const TPagedSetToken &aToken,TInt anEntrySize)
+//
+// Constructor reinstating an existing set.
+//
+	: iTree(aToken,EBtreeSecure,anEntrySize,anEntrySize),iKey(anEntrySize),iCount(aToken.iCount)
+	{}
+
+EXPORT_C void TPagedSetBase::Connect(MPagePool *aPool)
+//
+// Hook the tree up to its bits.
+//
+	{
+	iTree.Connect(aPool,&iKey);
+	}
+
+EXPORT_C void TPagedSetBase::Set(const TPagedSetToken &aToken)
+//
+// Set to the state described by aToken.
+//
+	{
+	iTree.Set(aToken,EBtreeSecure);
+	iCount=aToken.iCount;
+	}
+
+EXPORT_C TPagedSetToken TPagedSetBase::Token() const
+//
+// Build the streaming token for the set.
+//
+	{
+	return TPagedSetToken(iTree.Token(),iCount);
+	}
+
+EXPORT_C TInt TPagedSetBase::RepairL()
+//
+// Repair a broken set.
+//
+	{
+	TInt count=RepairL();
+	iCount=count;
+	return count;
+	}
+
+EXPORT_C void TPagedSetBase::ClearL()
+//
+// Empty the set.
+//
+	{
+	iTree.ClearL();
+	iCount=0;
+	}
+
+EXPORT_C TBool TPagedSetBase::ContainsL(const TAny *aPtr) const
+//
+// Return whether the set contains an entry equal to the one pointed to by aPtr.
+//
+	{
+	TBtreePos pos;
+	return iTree.FindL(pos,aPtr);
+	}
+
+EXPORT_C void TPagedSetBase::InsertL(const TAny *aPtr)
+//
+// Insert an entry into the set.
+//
+	{
+	TBtreePos pos;
+	if (!iTree.InsertL(pos,aPtr))
+		__LEAVE(KErrAlreadyExists); // a duplicate
+//
+	++iCount;
+	}
+
+EXPORT_C void TPagedSetBase::DeleteL(const TAny *aPtr)
+//
+// Delete an entry from the set.
+//
+	{
+	if (!iTree.DeleteL(aPtr))
+		__LEAVE(KErrNotFound);
+//
+	--iCount;
+	}
+
+EXPORT_C void TPagedSetBase::InsertAllowDuplicatesL(const TAny *aPtr)
+//
+// Insert an entry into the set, allow duplicates.
+//
+	{
+	TBtreePos pos;
+	__DEBUG(TBool success=)iTree.InsertL(pos,aPtr,EAllowDuplicates);
+	__ASSERT_DEBUG(success,User::Invariant());
+	++iCount;
+	}
+
+EXPORT_C TBool TPagedSetIterBase::ResetL()
+	{
+	return iTree->ResetL(iMark);
+	}
+
+EXPORT_C TBool TPagedSetIterBase::NextL()
+	{
+	return iTree->NextL(iMark);
+	}
+
+EXPORT_C void TPagedSetIterBase::ExtractAtL(TAny* aPtr) const
+	{
+	iTree->ExtractAtL(iMark,aPtr);
+	}
+
+EXPORT_C TBool TPagedSetBiIterBase::FirstL()
+	{
+	return iTree->FirstL(iPos);
+	}
+
+EXPORT_C TBool TPagedSetBiIterBase::LastL()
+	{
+	return iTree->LastL(iPos);
+	}
+
+EXPORT_C TBool TPagedSetBiIterBase::NextL()
+	{
+	return iTree->NextL(iPos);
+	}
+
+EXPORT_C TBool TPagedSetBiIterBase::PreviousL()
+	{
+	return iTree->PreviousL(iPos);
+	}
+
+EXPORT_C void TPagedSetBiIterBase::ExtractAtL(TAny* aPtr) const
+	{
+	iTree->ExtractAtL(iPos,aPtr);
+	}
+