bluetooth/btstack/avdtp/avdtpAllocators.cpp
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/avdtp/avdtpAllocators.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,66 @@
+// Copyright (c) 2003-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:
+// Implements the avdtp allocators
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "avdtpAllocators.h"
+
+TInt TBitFieldAllocator::Get(TInt& aValue, TInt aMax, TInt aMin/*=0*/)
+	{
+	if (aMax<aMin)
+		{
+		return KErrArgument;
+		}
+	if ((aMax-aMin)>((8*sizeof(iBitField))-1))
+		{
+		// this class supports 64 values/bits at present
+		return KErrTooBig;
+		}
+	// bit 1 represents the use of val=min,bit 2 use of val=min+1, etc
+	for (TInt bit=0;bit<=(aMax-aMin);bit++)
+		{
+		if (!(iBitField & (1<<bit)))
+			{
+			iMin = aMin;
+			// it's free, mark it
+			iBitField |= (1<<bit);
+			aValue = bit+iMin;
+			return KErrNone;
+			}
+		}	
+	return KErrInUse;
+	}
+	
+
+void TBitFieldAllocator::Free(TInt aValue)
+	{
+	TInt bitPos = aValue-iMin;
+#ifdef _DEBUG
+	if (!(iBitField & (1<<bitPos)))
+		{
+		// freeing an unclaimed bit - maybe due to a leave, but allow checking
+		__DEBUGGER();
+		}
+#endif
+	//Clear the bit in iSpace corresponding to aBitPos
+	iBitField &= (~(1<<bitPos));	
+	}
+
+