commsfwutils/commsbufs/inc/commsbuf.inl
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwutils/commsbufs/inc/commsbuf.inl	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,310 @@
+// Copyright (c) 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 TCommsBuf::TCommsBuf()
+{
+}
+
+#ifndef __KERNEL_MODE__
+
+inline TCommsBuf::TCommsBuf(TInt aRawDataOffset, TUint aBufSize, TInt aHandle, TInt aPool) :
+	iFrontCanary(KCanaryDefault),
+	iLength(aBufSize),
+	iOffset(aRawDataOffset),
+	iPool(aPool),
+	iHandle(aHandle),
+	iRawDataOffset(aRawDataOffset),
+	iRawSize(aBufSize),
+	iNext(NULL),
+	iBackCanary(KCanaryDefault)
+	{
+	iType = 0,
+	iReservedBytes[0] = 0;
+	iReservedBytes[1] = 0;
+	iReservedBytes[2] = 0;
+	iReservedWords[0] = 0;
+	iReservedWords[1] = 0;
+	iReservedWords[2] = 0;
+	iReservedWords[3] = 0;
+	iReservedWords[4] = 0;
+	}
+
+inline TCommsBuf::TCommsBuf(TInt aRawDataOffset, TUint aBufSize, TInt aPool) :
+	iFrontCanary(KCanaryDefault),
+	iLength(aBufSize),
+	iOffset(aRawDataOffset),
+	iPool(aPool),
+	iHandle(0),
+	iRawDataOffset(aRawDataOffset),
+	iRawSize(aBufSize),
+	iNext(NULL),
+	iBackCanary(KCanaryDefault)
+	{
+	iType = 0,
+	iReservedBytes[0] = 0;
+	iReservedBytes[1] = 0;
+	iReservedBytes[2] = 0;
+	iReservedWords[0] = 0;
+	iReservedWords[1] = 0;
+	iReservedWords[2] = 0;
+	iReservedWords[3] = 0;
+	iReservedWords[4] = 0;
+	}
+
+inline TAny* RCommsBuf::operator new(TUint /* aSize */, const TUint8* aPtr) __NO_THROW
+	{
+	__ASSERT_COMPILE(sizeof(RCommsBuf) == TCommsBuf::KCommsBufMetadataSize);
+	return (TUint8*)aPtr;
+	}
+
+inline void RCommsBuf::operator delete(TAny* /* aPtr */, const TUint8*) __NO_THROW
+	{		
+	}
+
+inline RCommsBuf::RCommsBuf()
+	{
+	}
+
+inline RCommsBuf::RCommsBuf(TInt aRawDataOffset, TUint aBufSize, TInt aHandle, TInt aPool)
+: iCommsBufMetaData(aRawDataOffset, aBufSize, aHandle, aPool)
+	{
+	}
+
+inline RCommsBuf::RCommsBuf(TInt aRawDataOffset, TUint aBufSize, TInt aPool)
+: iCommsBufMetaData(aRawDataOffset, aBufSize, aPool)
+	{		
+	}
+
+
+inline TPtrC8 RCommsBuf::DesC8() const
+/**
+Creates and returns a non-modifiable pointer descriptor representing the contained data
+
+@return non-modifiable pointer descriptor
+*/
+	{
+	__ASSERT_COMMSBUF();
+	return TPtrC8((TUint8*)(this) + iCommsBufMetaData.iOffset, iCommsBufMetaData.iLength);
+	}
+
+inline const TUint8* RCommsBuf::RawBase() const
+/**
+Returns a const ponter to the start of the data represented by the RCommsBuf
+
+ @return A const pointer
+*/
+	{
+	__ASSERT_COMMSBUF();
+	return ((TUint8*)this + iCommsBufMetaData.iRawDataOffset);
+	}
+
+inline TUint8* RCommsBuf::RawBase()
+/**
+Returns a ponter to the start of the data represented by the RCommsBuf
+
+ @return A pointer
+*/
+	{
+	__ASSERT_COMMSBUF();
+	return ((TUint8*)this + iCommsBufMetaData.iRawDataOffset);
+	}
+
+inline TInt RCommsBuf::RawSize() const
+/**
+Returns the raw size of the RCommsBuf data
+
+  @return the size of the RCommsBuf data
+*/
+	{
+	return iCommsBufMetaData.iRawSize;
+	}
+
+inline const TUint8* RCommsBuf::Ptr() const
+/**
+Returns a const pointer to the actual location of the data start. 
+Actual data start location may differ from the start of the data 
+
+@see RCommsBuf::RawBase
+@return A const pointer
+*/
+	{
+	__ASSERT_COMMSBUF();
+	return ((TUint8*)(this) + iCommsBufMetaData.iOffset);
+	}
+
+inline TUint8* RCommsBuf::Ptr()
+/**
+Returns a pointer to the actual location of the data start. 
+
+@see RCommsBuf::RawBase
+@return A pointer
+*/
+	{
+	__ASSERT_COMMSBUF();
+    return ((TUint8*)(this) + iCommsBufMetaData.iOffset);
+	}
+
+
+inline TInt	RCommsBuf::Length() const
+/**
+Returns the length of the RCommsBuf data
+
+  @return the length of the RCommsBuf data
+*/
+	{
+	return iCommsBufMetaData.iLength;
+	}
+
+inline TInt RCommsBuf::Offset() const
+/**
+Returns the offset of the RCommsBuf data
+
+  @return the offset of the RCommsBuf data
+*/
+	{
+	return iCommsBufMetaData.iOffset - iCommsBufMetaData.iRawDataOffset;
+	}
+
+inline void RCommsBuf::SetOffset(TInt aOffset)
+/**
+Sets the RCommsBuf data offset
+
+@param aOffset  An offset
+ */
+	{
+	__ASSERT_ALWAYS((aOffset >= 0) && ((aOffset + iCommsBufMetaData.iLength) <= iCommsBufMetaData.iRawSize), CommsBuf::Panic(EMBuf_NegativeOffset));
+	iCommsBufMetaData.iOffset = iCommsBufMetaData.iRawDataOffset + aOffset;
+	}
+
+inline TUint8 RCommsBuf::operator[] (TInt aPos) const
+	{
+	__ASSERT_COMMSBUF();
+    __ASSERT_ALWAYS(aPos >= 0 && aPos < Length(), CommsBuf::Panic(EMBuf_IndexOutofRange));
+	return (Ptr()[aPos]);
+	}
+
+inline TUint8& RCommsBuf::operator[] (TInt aPos)
+	{
+	__ASSERT_COMMSBUF();
+    __ASSERT_ALWAYS(aPos >= 0 && aPos < Length(), CommsBuf::Panic(EMBuf_IndexOutofRange));
+	return (((TUint8*)Ptr())[aPos]);
+	}
+
+inline void RCommsBuf::Reset()
+/**
+Resets the length and offset of the RCommsBuf data
+*/
+	{
+	iCommsBufMetaData.iLength = 0;
+	iCommsBufMetaData.iOffset = iCommsBufMetaData.iRawDataOffset;
+	}
+
+
+inline TInt RCommsBuf::AppendLimit() const
+/**
+Returns the length of the bytes that can be appended
+*/
+	{
+    return iCommsBufMetaData.iRawDataOffset + iCommsBufMetaData.iRawSize - iCommsBufMetaData.iOffset - iCommsBufMetaData.iLength;
+	}
+
+inline TInt RCommsBuf::PrependLimit() const
+/**
+Returns the length of the data that can be prepended
+*/
+	{
+	return iCommsBufMetaData.iOffset - iCommsBufMetaData.iRawDataOffset;
+	}
+
+inline void RCommsBuf::SetDataRange(TInt aOffset, TInt aLength)
+/**
+Sets the offset and length of the data
+
+@param aOffset An offset
+@param aLength A length
+*/
+	{
+	__ASSERT_ALWAYS((aOffset >= 0) && (aLength >= 0) && ((aOffset + aLength) <= iCommsBufMetaData.iRawSize), CommsBuf::Panic(EMBuf_NegativeOffset));
+	iCommsBufMetaData.iOffset = iCommsBufMetaData.iRawDataOffset + aOffset;
+	iCommsBufMetaData.iLength = aLength;
+	}
+
+inline void RCommsBuf::AdjustDataStart(TInt aDelta)
+/**
+Adjust the RCommsBuf data offset and length with the given delta value.
+ie; the data offset is incremented by the given delta value and the data 
+length is decremented by the given delta value
+*/
+	{
+	iCommsBufMetaData.iOffset += aDelta;
+	iCommsBufMetaData.iLength -= aDelta;
+	__ASSERT_ALWAYS((iCommsBufMetaData.iOffset >= iCommsBufMetaData.iRawDataOffset) && (iCommsBufMetaData.iLength >= 0), CommsBuf::Panic(EMBuf_InvalidLengthOrOffset));
+	}
+
+inline void RCommsBuf::AdjustDataEnd(TInt aDelta)
+/**
+Adjust the RCommsBuf data length with the given delta value. 
+ie; the data length is incremented by the given value
+*/
+	{
+	iCommsBufMetaData.iLength += aDelta;
+	__ASSERT_ALWAYS((iCommsBufMetaData.iLength >= 0) && ((Offset() + iCommsBufMetaData.iLength) <= iCommsBufMetaData.iRawSize), CommsBuf::Panic(EMBuf_InvalidLengthOrOffset));
+	}
+
+inline void RCommsBuf::SetNext(RCommsBuf* aBuf)
+	{
+	iCommsBufMetaData.iNext = aBuf;		
+	}
+
+inline RCommsBuf* RCommsBuf::Next()
+	{
+	return iCommsBufMetaData.iNext;		
+	}
+
+inline const RCommsBuf* RCommsBuf::Next() const
+	{
+	return iCommsBufMetaData.iNext;	
+	}
+
+inline CCommsBufPool* RCommsBuf::Pool() const	
+	{
+	return reinterpret_cast<CCommsBufPool*>(iCommsBufMetaData.iPool);
+	}
+
+inline TInt RCommsBuf::Handle() const
+	{
+	return iCommsBufMetaData.iHandle;
+	}
+
+inline void RCommsBuf::AssertCommsBufInvariants() const
+    {
+    __ASSERT_ALWAYS(iCommsBufMetaData.iFrontCanary == TCommsBuf::KCanaryDefault && iCommsBufMetaData.iBackCanary == TCommsBuf::KCanaryDefault, CommsBuf::Panic(EMBuf_CorruptMBuf));
+    }
+
+
+RCommsBufAccessor::RCommsBufAccessor(const RCommsBuf& aCommsBuf) : iCommsBuf(aCommsBuf)
+	{
+	}
+
+TInt RCommsBufAccessor::Handle() const
+	{
+	return iCommsBuf.Handle();
+	}
+
+
+#endif // __KERNEL_MODE__
+
+
+