commsfwutils/commsbufs/mbufmgr/inc/mbuf.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwutils/commsbufs/mbufmgr/inc/mbuf.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,142 @@
+// Copyright (c) 1997-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:
+//
+
+/**
+@file
+
+*/
+
+#if !defined(__MBuf_h__)
+#define __MBuf_h__
+
+#include <es_commsbuf.h>
+#include <comms-infras/mbufallocator.h>
+
+
+// iType field of an MBuf
+enum TMBufType
+	{
+	EMBufFree, EMBufData, EMBufHeader
+	};
+
+class RMBufPoolChain;
+
+class RMBuf : public RCommsBuf
+/**
+RMBuf is a thin wrapper over RCommsBuf providing compatibility for existing code.
+
+@publishedPartner
+@released
+*/
+	{
+	friend class CMBufPool;
+public:
+	IMPORT_C void Init(TMBufType aType);
+	IMPORT_C RMBuf* Last();
+	//
+	IMPORT_C static RMBuf* Alloc();
+	IMPORT_C static RMBuf* Alloc(TUint aSize);
+	IMPORT_C static RMBuf* AllocL();
+	IMPORT_C static RMBuf* AllocL(TUint aSize);
+
+	// Methods to avoid calls to thread local storage
+	IMPORT_C static RMBuf* Alloc(RMBufAllocator& aRMBufAllocator);
+	IMPORT_C static RMBuf* Alloc(TUint aSize, RMBufAllocator& aRMBufAllocator);
+	IMPORT_C static RMBuf* AllocL(RMBufAllocator& aRMBufAllocator);
+	IMPORT_C static RMBuf* AllocL(TUint aSize, RMBufAllocator& aRMBufAllocator);
+
+	IMPORT_C void Free();
+
+	inline void FillZ();
+	//
+	inline TUint8* Buffer();
+	inline TUint8* Ptr();
+	inline TUint8* EndPtr();
+	inline RMBuf* Next();
+	inline RMBufChain& NextPkt();
+	inline TInt Size() const;
+	inline TInt Offset() const;
+	inline TInt Length() const;
+	inline TInt End() const;
+	inline TMBufType Type() const;
+	inline const TUint8* Buffer() const;
+	inline const TUint8* Ptr() const;
+	inline const TUint8* EndPtr() const;
+	inline const RMBuf* Next() const;
+	inline const RMBufChain& NextPkt() const;
+	//
+	inline void Link(RMBuf* aBuf);
+	inline void Unlink();
+	inline void LinkPkt(RMBufChain &aChain);
+	inline void UnlinkPkt();
+	inline void SetType(TMBufType aType);
+	inline void SetOffset(TInt aOffset);
+	inline void SetLength(TInt aLength);
+	inline void SetData(TInt aOffset, TInt aLength);
+	inline void AdjustStart(TInt aLen);
+	inline void AdjustEnd(TInt aLen);
+	inline void Put(TUint8 aVal, TInt aOffset=0);
+	inline TUint8 Get(TInt aOffset=0) const;
+
+
+private:
+#ifndef __KERNEL_MODE__
+	TAny *operator new ( TUint aSize, TUint8* aPtr );
+	void operator delete ( TAny* aPtr, TUint8*  );
+
+// Forbidden ops
+	RMBuf();
+	RMBuf(const RMBuf &);
+	RMBuf& operator=(const RMBuf &);
+#else
+    RMBuf() : iBuffer(NULL), iSize(0), iNext(NULL), iPoolChain(NULL) {}
+#endif
+//
+
+private:
+	IMPORT_C void __DbgPut(TUint8 aVal, TInt aOffset=0);
+	IMPORT_C TUint8 __DbgGet(TInt aOffset=0) const;
+	};
+
+class TMBufIter
+/**
+An iterator to iterate through the RMBuf
+@publishedPartner
+@released
+*/
+	{
+public:
+	TMBufIter();
+	inline TMBufIter(RMBuf* aChain);
+	inline TMBufIter(RMBufChain& aChain);
+	inline TMBufIter& operator =(RMBuf* aChain);
+	inline TMBufIter& operator =(RMBufChain& aChain);
+	inline RMBuf* operator++(TInt);
+	inline operator RMBuf* ();
+	inline TBool More();
+	inline RMBuf* MBuf();
+	//
+protected:
+	TCommsBufIter iIterator;
+	};
+
+#endif // __rmbuf_h__
+
+#if !defined(__MBuf_Ignore_Inlines__)
+#define __MBufchain_Ignore_Inlines__
+#include <comms-infras/mbufchain.h>
+#undef __MBufchain_Ignore_Inlines__
+#include <comms-infras/mbuf.inl>
+#endif // __rmbuf_Ignore_Inlines__