mmlibs/mmfw/src/Client/Audio/MmfFifo.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Audio/MmfFifo.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,92 @@
+// Copyright (c) 2001-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:
+//
+
+#ifndef __MMFFIFO_H_
+#define __MMFFIFO_H_
+
+// standard EPOC include header files
+#include <e32base.h>
+#include <e32std.h>
+
+
+/**
+	Class for storing stream data 
+*/
+class TMMFFifoItemBase
+	{
+public:
+	static const TInt	iOffset;
+private:
+	TSglQueLink			iSlink;
+	};
+
+template<class T>
+class TMMFFifoItem : public TMMFFifoItemBase
+	{
+public:
+	inline TMMFFifoItem(T& aData);
+	inline T& GetData();
+private:
+	T& iData;
+	};
+
+/**
+	Class for processing stream data queue (add, get, remove etc)
+*/
+class CMMFFifoBase	: public CBase
+	{
+public:
+	virtual ~CMMFFifoBase();
+	TBool IsEmpty();
+	void AddToFifo(TMMFFifoItemBase& aItem);
+protected:
+	CMMFFifoBase();
+	void RemoveFirstItemBase();
+	TMMFFifoItemBase* GetBase();
+private:
+	TSglQue<TMMFFifoItemBase>		iFifo;
+	TSglQueIter<TMMFFifoItemBase>	iFifoIter;
+	};
+
+template<class T>
+class CMMFFifo : public CMMFFifoBase
+	{
+public:
+	inline void RemoveFirstItem();
+	inline TMMFFifoItem<T>* Get();
+	};
+
+
+template <class T>
+TMMFFifoItem<T>::TMMFFifoItem(T& aData)
+: iData(aData)
+	{}
+
+template <class T>
+T& TMMFFifoItem<T>::GetData()
+	{ return iData; }
+
+//
+
+template <class T>
+void CMMFFifo<T>::RemoveFirstItem()
+	{ RemoveFirstItemBase(); }
+
+template <class T>
+inline TMMFFifoItem<T>* CMMFFifo<T>::Get()
+	{ return STATIC_CAST(TMMFFifoItem<T>*, GetBase()); }
+
+
+#endif