// 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)); }