commsfwutils/commsbufs/mbufmgr/inc/mbufchain.inl
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwutils/commsbufs/mbufmgr/inc/mbufchain.inl	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,128 @@
+// Copyright (c) 2007-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:
+//
+
+#if !defined(__MBufChain_inl__)
+#define __MBufChain_inl__
+
+//
+// MBUF CHAIN
+//
+
+/**
+Constructor
+*/
+inline RMBufChain::RMBufChain()
+	{}
+
+/**
+Constructor
+*/
+inline RMBufChain::RMBufChain(RCommsBuf* aChain) : RCommsBufChain(aChain)
+	{}
+
+
+/**
+Rerurns the first in the chain
+@return the first in the chain
+*/
+inline RMBuf* RMBufChain::First()
+{ return static_cast<RMBuf*>(iNext); }
+
+/**
+Returns the first in the chain
+@return the first in the chain
+*/
+inline const RMBuf* RMBufChain::First() const
+{ return static_cast<const RMBuf*>(iNext); }
+
+/**
+operator =
+*/
+inline RMBufChain& RMBufChain::operator =(RMBuf* aChain)
+	{ iNext = aChain; return *this; }
+
+/**
+Initializes the members (iNext = NULL)
+*/
+inline void RMBufChain::Init()
+	{ iNext = NULL; }
+
+inline TBool RMBufChain::IsEmpty() const
+/**
+Check if empty, if empty returns true
+*/
+	{
+	return RCommsBufChain::IsEmpty();
+	}
+
+#ifndef __KERNEL_MODE__
+/**
+Links a chain to the chain in the chain
+@param aChain The chain to be linked
+*/
+inline void RMBufChain::Link(RMBufChain &aChain)
+	{ if (!IsEmpty()) (static_cast<RMBuf*>(iNext))->LinkPkt(aChain); }
+
+/**
+Unlink the nfirst in the chain
+*/
+inline void RMBufChain::Unlink()
+	{ if (!IsEmpty()) (static_cast<RMBuf*>(iNext))->UnlinkPkt(); }
+
+/**
+Returns next in the chain if there is next else returns the current
+*/
+inline RMBufChain& RMBufChain::Next()
+	{ return IsEmpty() ? *this : (static_cast<RMBuf*>(iNext))->NextPkt(); }
+
+/**
+Returns next in the chain if there is next else returns the current
+*/
+inline const RMBufChain& RMBufChain::Next() const
+	{ return IsEmpty() ? *this : (static_cast<RMBuf*>(iNext))->NextPkt(); }
+
+/** 	  	 
+Goto specified byte offset into an Mbuf chain. Used as part of copyin/out, split etc to position 	  	 
+MBuf pointer and offset from start of iBuffer. 	  	 
+@param aOffset The offset 	  	 
+@param resBuf result buffer 	  	 
+@param resOffset result offset 	  	 
+@param resLength result length 	  	 
+@param resPrevBuf result previous Buf in the chain 	  	 
+@return ETrue if successful 	  	 
+*/
+inline TBool RMBufChain::Goto(TInt aOffset, RMBuf* &resBuf, TInt& resOffset, TInt& resLength) const
+	{
+	 RMBuf* prev;  return Goto(aOffset, resBuf, resOffset, resLength, prev);
+	}
+
+inline TInt RMBufChain::Copy(RMBufChain& newChain) const
+    {
+    return Copy(newChain, 0, KMBufAll, 0);
+    }
+
+inline TInt RMBufChain::Copy(RMBufChain& newChain, TInt aOffset) const
+    {
+    return Copy(newChain, aOffset, KMBufAll, 0);
+    }
+
+inline TInt RMBufChain::Copy(RMBufChain& newChain, TInt aOffset, TInt aLen) const
+	{
+	return Copy(newChain, aOffset, aLen, 0);
+	}
+
+#endif // KERNEL_MODE
+
+#endif // __MBufChain_inl__