Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

127 lines
2.1 KiB

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
BList.hxx
Abstract:
Generic list of pointers class.
List elements are treated as four byte values.
Note:
It is acceptable to insert the same pointer into the list
several times. Some usage depends on this.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 95-03-02 Bits 'n pieces
MarioGo 95-09-07 Changed from a template to a generic class for PPC.
--*/
#ifndef __BLIST_HXX
#define __BLIST_HXX
class CBListIterator;
class CBList
{
friend class CBListIterator;
private:
ULONG Hash(PVOID p);
protected:
ULONG _ulmaxData;
ULONG _ulcElements;
PVOID *_data;
public:
CBList(USHORT cElement = 8)
{
// It's going to grow next time.
ASSERT(cElement > 1);
_ulmaxData = cElement/2;
_ulcElements = 0;
_data = 0;
}
~CBList()
{
delete _data;
}
ORSTATUS
Insert(IN PVOID p);
PVOID
Remove(IN PVOID p);
BOOL
Member(IN PVOID p);
ULONG
Size()
{
return(_ulcElements);
}
};
class CBListIterator
{
private:
CBList *_pblist;
LONG _next;
public:
CBListIterator(CBList *head) :
_pblist(head),
_next(-1)
{ }
PVOID
Next()
{
if (_pblist->_data)
{
do
{
_next++;
}
while(_next < (LONG)_pblist->_ulmaxData && 0 == _pblist->_data[_next]);
if (_next < (LONG)_pblist->_ulmaxData)
{
ASSERT(_pblist->_data[_next] != 0);
return(_pblist->_data[_next]);
}
}
return(0);
}
void
Reset(CBList *head)
{
// Could just assign the new head if there is a use for that.
ASSERT(head == _pblist);
_next = -1;
}
};
#endif / __BLIST_HXX