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.
|
|
/*++
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
|