servicediscoveryandcontrol/pnp/test/upnp/chunkmgr/inc/rchunkpool.h
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/chunkmgr/inc/rchunkpool.h	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,94 @@
+// Copyright (c) 2008-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
+// @internalComponent
+// 
+//
+
+#ifndef __RCHUNKPOOL_H_
+#define __RCHUNKPOOL_H_
+
+#include "cmemchunk.h"
+
+class RChunkPool
+	{
+public:
+	RChunkPool ( TInt aBlockSize, TInt aThresholdValue, TInt aMinGrowth, CChunkManager& aChunkManager );
+	RChunkPool ( CChunkManager& aChunkManager, TInt aBlockSize );
+	
+	void OpenL ();
+	void Close ();
+	
+	TInt Alloc ( RMemCellList& aList, TInt aSize );
+	TInt GrowAndAlloc ( RMemCellList& aList, TInt aSize, TInt aNumBlocks );
+	void FreeToPool ( RMemCell* aMemCell );
+	void AppendToFreeList ( CMemChunk* aChunk );
+	static TInt Compare ( const RChunkPool& aLHSPool, const RChunkPool& aRHSPool );
+	
+	TInt BlockSize () const
+		{
+		return iBlockSize;
+		}
+		
+	void Wait ()
+		{
+		iFreeListLock.Wait ();
+		}
+	
+	void Signal ()
+		{
+		iFreeListLock.Signal ();
+		}
+		
+	void SetThreshold ( TInt aThreshold )
+		{
+		iThresholdValue = aThreshold;
+		}
+		
+	void SetGrowth ( TInt aGrowth )
+		{
+		iMinGrowth = aGrowth;
+		}
+		
+	void Append ( CMemChunk* aNewChunk )
+		{
+		iAllocatedChunks.Append ( aNewChunk );
+		}
+		
+	TInt FreeSpace ()
+		{
+		return iFreeSpace;
+		}
+		
+	CChunkManager& ChunkManager ()
+		{
+		return iChunkManager;
+		}
+		
+private:	
+	TInt GrowPool ( TUint aNumBlocks );
+	
+private:
+	TInt						iBlockSize;
+	RPointerArray<CMemChunk>	iAllocatedChunks;
+	CChunkManager&				iChunkManager;
+	RMemCellList				iFreeBlocks;
+	RFastLock					iFreeListLock;
+	TInt						iFreeSpace;
+	TInt						iUsedSpace; //TODO: can be removed???
+	TInt 						iThresholdValue;
+	TInt 						iMinGrowth;
+	};
+
+#endif /*__RCHUNKPOOL_H_*/