persistentstorage/sql/SRC/Common/SqlBufIterator.inl
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Common/SqlBufIterator.inl	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,234 @@
+// Copyright (c) 2006-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:
+// /////////////////////          TSqlBufRIterator class          /////////////////////////////////////////
+// 
+//
+
+/**
+ 
+ Initializes the iterator.
+ After the initialization the iterator points to the first flat buffer field - 1.
+ 
+ @param aBuf A reference to the buffer which will be iterated.
+*/
+inline void TSqlBufRIterator::Set(const RSqlBufFlat& aBuf)
+	{
+	iBegin = aBuf.Header();
+	iCurrent = iBegin - 1;
+	iEnd = iBegin + aBuf.Count();
+	}
+
+/**
+Moves to the next flat buffer field
+
+@return False if there are no more fields to be iterated.
+*/
+inline TBool TSqlBufRIterator::Next()
+	{
+	return ++iCurrent < iEnd;
+	}
+
+/**
+Moves to the specified field in the flat buffer.
+
+@param aIndex Field index
+*/
+inline void TSqlBufRIterator::MoveTo(TInt aIndex)
+	{
+	__SQLASSERT((iBegin + (TUint)aIndex) < iEnd, ESqlPanicBadArgument);
+	iCurrent = iBegin + aIndex;
+	}
+
+/**
+@return True if the current flat buffer field is "Present"
+*/
+inline TBool TSqlBufRIterator::IsPresent() const
+	{
+	__SQLASSERT(iCurrent >= iBegin && iCurrent < iEnd, ESqlPanicInternalError);
+	return iCurrent->iPos > 0;
+	}
+	
+/**
+@return Current flat buffer field type. One of TSqlColumnType enum item values or ESqlText8.
+*/
+inline TInt TSqlBufRIterator::Type() const
+	{
+	__SQLASSERT(iCurrent >= iBegin && iCurrent < iEnd, ESqlPanicInternalError);
+	return iCurrent->Type();
+	}
+	
+/**
+@return Current flat buffer field size
+*/
+inline TInt TSqlBufRIterator::Size() const
+	{
+	__SQLASSERT(iCurrent >= iBegin && iCurrent < iEnd, ESqlPanicInternalError);
+	return Type() == ESqlText ? iCurrent->Size() / sizeof(TUint16) : iCurrent->Size();
+	}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////                 TSqlBufWIterator class          //////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+Initializes the iterator.
+After the initialization the iterator points to the first flat buffer field - 1.
+
+@param aBuf A reference to the buffer which will be iterated.
+*/
+inline void TSqlBufWIterator::Set(RSqlBufFlat& aBuf)
+	{
+	iBuf = &aBuf;
+	iIndex = -1;
+	}
+	
+/**
+Moves to the next flat buffer field
+
+@return False if there are no more fields to be iterated.
+*/
+inline TBool TSqlBufWIterator::Next()
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	return ++iIndex < iBuf->Count();	
+	}
+	
+/**
+Moves to the specified field in the flat buffer.
+
+@param aIndex Field index
+*/
+inline void TSqlBufWIterator::MoveTo(TInt aIndex)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)aIndex < iBuf->Count(), ESqlPanicInternalError);
+	iIndex = aIndex;
+	}
+
+/**
+Sets the current flat buffer field to NULL.
+*/
+inline void TSqlBufWIterator::SetNull()
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	(void)iBuf->SetField(iIndex, ESqlNull, NULL, 0);
+	}
+	
+/**
+Sets the current flat buffer field as "Not present".
+
+@param aType Field type. One of TSqlColumnType enum item values or ESqlText8.
+@param aLength Field length in bytes
+*/
+inline void TSqlBufWIterator::SetAsNotPresent(TInt aType, TInt aLength)
+	{
+	__SQLASSERT(::IsSequenceSqlType(aType), ESqlPanicBadArgument);
+	__SQLASSERT(aLength >= 0, ESqlPanicBadArgument);
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	iBuf->SetField(iIndex, aType, NULL, aType == ESqlText ? aLength * sizeof(TUint16) : aLength);
+	}
+	
+/**
+Initializes current flat buffer field with an integer value.
+
+@param aValue An integer value to be set as a field content
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetInt(TInt aValue)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlInt, &aValue, sizeof(TInt));
+	}
+	
+/**
+Initializes current flat buffer field with an 64 bit integer value.
+
+@param aValue A 64 bit integer value to be set as a field content
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetInt64(TInt64 aValue)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlInt64, &aValue, sizeof(TInt64));
+	}
+	
+/**
+Initializes current flat buffer field with a real value.
+
+@param aValue A real value to be set as a field content
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetReal(TReal aValue)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlReal, &aValue, sizeof(TReal));
+	}
+	
+/**
+Initializes current flat buffer field with a block of binary data.
+
+@param aValue An 8 bit descriptor pointing to the block of data to be set as a field content.
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetBinary(const TDesC8& aValue)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlBinary, aValue.Ptr(), aValue.Length());
+	}
+	
+/**
+Initializes current flat buffer field with a block of 16 bit text.
+
+@param aValue A 16 bit descriptor pointing to the block of text to be set as a field content.
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetText(const TDesC16& aValue)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlText, aValue.Ptr(), aValue.Length() * sizeof(TUint16));
+	}
+
+	
+/**
+Initializes current flat buffer field with a zeroblob of the specified size.
+
+@param aSize The size, in bytes, of the zeroblob to be set as the field content.
+
+@return KErrNone, The operation has completed successfully;
+		KErrNoMemory, Out of memory condition has occured.
+*/
+inline TInt TSqlBufWIterator::SetZeroBlob(TInt aSize)
+	{
+	__SQLASSERT(iBuf != NULL, ESqlPanicInternalError);
+	__SQLASSERT((TUint)iIndex < iBuf->Count(), ESqlPanicInternalError);
+	return iBuf->SetField(iIndex, ESqlZeroBlob, &aSize, sizeof(TInt));
+	}