Exemple #1
0
void removeListDuplicates(LinkedListNode *node) {

    BitVector *bv = BitVectorNew(255);
    LinkedListNode *previous = node;

    while (node != NULL) {
        if (BitVectorGet(bv, node->val)) {
            previous->next = node->next;
        } else {
            BitVectorSet(bv, node->val);
            previous = node;
        }
        node = node->next;
    }
}
Exemple #2
0
///////////////////////////////////////////////////////////////////////////////
// ResMapFree
// 
// Description:
//	This function sets the given resource number to be free.
//	should not be used to free reserved entries
// 
// Inputs:
//	pResMap		- Pointer to resource map.
//	Number		- Number of resource to free
// 
// Outputs:
//	None.
// 
// Returns:
//	FSUCCESS
//	FINVALID_STATE - resource was already free
// 
///////////////////////////////////////////////////////////////////////////////
FSTATUS 
ResMapFree(
	IN	RESOURCE_MAP* const	pResMap, 
	IN	const uint32	Number)
{
	FSTATUS Status;

	if (Number >= BitVectorGetSize(&pResMap->m_ResList)
		|| BitVectorGet(&pResMap->m_ResList, Number) == 0)
	{
		return FINVALID_STATE;
	}
	DEBUG_ASSERT(pResMap->m_NumAllocated);

	Status = BitVectorSet(&pResMap->m_ResList, Number, 0);
	ASSERT(Status == FSUCCESS);
	if (Number < pResMap->m_FirstFree)
		pResMap->m_FirstFree = Number;
	--(pResMap->m_NumAllocated);
	return Status;
}
Exemple #3
0
///////////////////////////////////////////////////////////////////////////////
// ResMapReserve
// 
// Description:
//  Reserves a specific resource number
// 
// Inputs:
//	pResMap		- pointer to resource map to iterate through
//	Number		- resource number to reserve
// 
// Outputs:
// 
// Returns:
//	FSUCCESS - Number now marked as allocated
//	FINSUFFICIENT_RESOURCES  - Number already allocated
//	FINSUFFICIENT_MEMORY  - unable to grow map
// 
///////////////////////////////////////////////////////////////////////////////
FSTATUS 
ResMapReserve(
	IN	RESOURCE_MAP* const	pResMap,
	IN	uint32				Number )
{
	FSTATUS Status;

	// check Number is not already allocated or reserved
	if (BitVectorGetSize(&pResMap->m_ResList) > Number)
	{
		if (BitVectorGet(&pResMap->m_ResList, Number))
		{
			return FINSUFFICIENT_RESOURCES;
		}
	}
	Status = BitVectorSet(&pResMap->m_ResList, Number, 1);
	if (Status == FSUCCESS)
	{
		// Leave FirstFree and NextFree alone, won't hurt much
		++(pResMap->m_NumReserved);
	}
	return Status;
}