persistentstorage/centralrepository/common/inc/datatype.inl
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/centralrepository/common/inc/datatype.inl	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,261 @@
+// 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:
+//
+
+inline RSettingsArray::RSettingsArray() :
+	RArray<TServerSetting>(KGranularity, _FOFF(TServerSetting, iKey))
+	{iIsDefault=EFalse;}
+
+inline RSettingsArray::~RSettingsArray()
+	{ Reset(); }
+
+inline TServerSetting* RSettingsArray::Find(TInt aKey) const
+	{
+	TInt i = FindInUnsignedKeyOrder(TServerSetting(aKey));
+	return i>=0 ? const_cast<TServerSetting*>(&operator[](i)) : (TServerSetting*)0;
+	}
+
+inline TInt RSettingsArray::FindIndex(const TServerSetting& aSetting) const
+	{
+	return FindInUnsignedKeyOrder(aSetting);
+	}
+
+inline void RSettingsArray::OrderedInsertL(const TServerSetting& aEntry)
+	{ InsertInUnsignedKeyOrderL(aEntry); }
+
+inline TInt RSettingsArray::OrderedInsert(const TServerSetting& aEntry)
+	{ return InsertInUnsignedKeyOrder(aEntry); }
+
+inline TInt RSettingsArray::Count() const
+	{ return RArray<TServerSetting>::Count(); }
+
+inline const TServerSetting& RSettingsArray::operator[](TInt aIndex) const
+	{
+	return RArray<TServerSetting>::operator[](aIndex);
+	}
+
+inline TServerSetting& RSettingsArray::operator[](TInt aIndex)
+	{
+	return RArray<TServerSetting>::operator[](aIndex);
+	}
+
+inline void RSettingsArray::Remove(TInt aId)
+	{
+	TInt i = FindInUnsignedKeyOrder(TServerSetting(aId));
+	if(i>=0)
+		DeleteElement(i);
+	}
+
+inline void RSettingsArray::Reset()
+	{
+	for(TInt i=Count()-1; i>=0; i--)
+		{
+		operator[](i).Reset();
+		}
+	RArray<TServerSetting>::Reset();
+	}
+
+inline void RSettingsArray::Close()
+	{
+	Reset();
+	}
+
+inline void RSettingsArray::DeleteElement(TInt aIndex)
+	{
+	operator[](aIndex).Reset();
+	RArray<TServerSetting>::Remove(aIndex);
+	}
+
+inline void RSettingsArray::RemoveElement(TInt aIndex)
+	{
+	RArray<TServerSetting>::Remove(aIndex);
+	}
+
+inline void RSettingsArray::AdoptL(RSettingsArray& aSrc)
+	{
+	Reset();
+
+	for(TInt i=aSrc.Count()-1; i>=0; i--)
+		{
+		AppendL(aSrc[0]);
+		aSrc.RemoveElement(0);
+		}
+	}
+
+inline void RSettingsArray::ExternalizeL(RWriteStream& aStream) const
+	{
+	
+	TInt32 numElements = Count() ;	
+	
+	aStream << numElements ;
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+			aStream << (*this)[count] ;
+		} 
+	}
+
+
+inline void RSettingsArray::WriteBackupStream(RWriteStream& aStream) const
+	{
+	
+	// Note: Unlike the usual implementation of Externalize()
+	// only selected data (settings with the "backup" bit set
+	// in metadata) are streamed out!!!
+	TInt32 numElementsToExternalize = 0;
+	TInt32 numElements = Count() ;	
+	TInt32 count ;
+		
+	for (count = 0; count < numElements; count++)
+		{
+		if ((*this)[count].Meta() & KMetaBackup) 
+			numElementsToExternalize++ ;
+		} 
+	
+	aStream << numElementsToExternalize ;
+	for (count = 0; count < numElements; count++)
+		{
+		if ((*this)[count].Meta() & KMetaBackup) 
+			aStream << (*this)[count] ;
+		} 
+	}
+
+inline void RSettingsArray::InternalizeL(RReadStream& aStream)
+	{
+ 	TInt32 numElements;
+	
+	aStream >> numElements ;	
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+		TServerSetting serverSetting ;
+		aStream >> serverSetting ;
+		serverSetting.PushL();
+		if(IsDefault())
+			{
+			serverSetting.SetClean();			
+			}
+		AppendL(serverSetting) ;
+		serverSetting.Pop();
+		} 
+	}
+
+inline TBool RSettingsArray::IsDefault() const
+	{
+	return iIsDefault;
+	}
+
+inline void RSettingsArray::SetIsDefault(TBool aIsDefault)
+	{
+	iIsDefault=aIsDefault;
+	}
+
+inline RRangePolicyArray::RRangePolicyArray() :
+	RArray<TSettingsAccessPolicy>()
+	{}
+
+inline RRangePolicyArray::~RRangePolicyArray()
+	{ Reset(); }
+
+inline TSettingsAccessPolicy* RRangePolicyArray::Find(TInt aKey) const
+	{
+	for(TInt ii = Count()-1; ii>=0;ii--)
+		{
+		if(operator[](ii).IsInRange(aKey))
+			return const_cast<TSettingsAccessPolicy*>(&operator[](ii));
+		}
+	return NULL;
+	}
+
+inline void RRangePolicyArray::ExternalizeL(RWriteStream& aStream) const
+	{
+	TInt32 numElements = Count() ;
+	
+	aStream << numElements ;
+	
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+		aStream << (*this)[count] ;
+		} 
+	}
+
+inline void RRangePolicyArray::InternalizeL(RReadStream& aStream)
+	{
+	TInt32 numElements = Count() ;	
+	aStream >> numElements ;
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+		TSettingsAccessPolicy newElement ;
+		aStream >> newElement ;
+		AppendL(newElement) ;
+		} 
+	}
+
+inline RDefaultMetaArray::RDefaultMetaArray() :
+	RArray<TSettingsDefaultMeta>()
+	{}
+
+inline RDefaultMetaArray::~RDefaultMetaArray()
+	{ Reset(); }
+
+inline TSettingsDefaultMeta* RDefaultMetaArray::Find(TInt aKey) const
+	{
+	for(TInt ii = Count()-1; ii>=0;ii--)
+		{
+		if(operator[](ii).IsInRange(aKey))
+			return const_cast<TSettingsDefaultMeta*>(&operator[](ii));
+		}
+	return NULL;
+	}
+
+inline void RDefaultMetaArray::ExternalizeL(RWriteStream& aStream) const
+	{
+	TInt32 numElements = Count() ;
+	
+	aStream << numElements ;
+	
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+		aStream << (*this)[count] ;
+		} 
+	}
+
+inline void RDefaultMetaArray::InternalizeL(RReadStream& aStream)
+	{
+	TInt32 numElements = Count() ;	
+	aStream >> numElements ;
+	for (TInt32 count = 0; count < numElements; count++)
+		{
+		TSettingsDefaultMeta newElement ;
+		aStream >> newElement ;
+		AppendL(newElement) ;
+		} 
+	}
+
+inline RSingleMetaArray::RSingleMetaArray() : RArray<TSettingSingleMeta>()
+	{
+	}
+
+inline TInt RSingleMetaArray::Find(TUint32 aKey, TUint32& aMeta) const
+	{
+	TInt num = Count();
+	for(TInt i = 0; i < num; i++)
+		{
+		TSettingSingleMeta singleMeta = static_cast<TSettingSingleMeta> (operator[](i));
+		if(singleMeta.GetKey() == aKey)
+			{
+			aMeta = singleMeta.GetMeta();
+			return KErrNone;
+			}
+		}
+	return KErrNotFound;
+	}