Source code of Windows XP (NT5)
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) 1999 Microsoft Corporation
Module Name:
hashindx.hxx
Abstract:
This class implements a sparse number set with huge (<= ULONG) number of elements. The numset.cxx implementation uses too much memory when the number of elements is in the 100,000 range. The numbers stored are not in any particular order and this implementation only supports a subset of set operations.
Author:
Daniel Chan (danielch) 05-05-99
--*/
#if !defined(HASH_INDEX_DEFN)
#define HASH_INDEX_DEFN
DECLARE_CLASS( HASH_INDEX );
typedef struct _HASH_INDEX_ELEMENT {
ULONG elementCount; // number of elements in elements
ULONG maxElementCount; // max. number of elements in element
PULONG elements; // pointer to an array of ULONGs
};
DEFINE_TYPE( _HASH_INDEX_ELEMENT, HASH_INDEX_ELEMENT );
class HASH_INDEX : public OBJECT {
public:
DECLARE_CONSTRUCTOR( HASH_INDEX );
VIRTUAL ~HASH_INDEX( );
NONVIRTUAL BOOLEAN Initialize( ULONG HashTableSize, USHORT HashElementIncrement );
NONVIRTUAL BOOLEAN QueryAndAdd( IN ULONG HashValue, IN ULONG Index, OUT PULONG *MatchIndexArray, OUT PULONG MatchIndexCount );
NONVIRTUAL BOOLEAN RemoveAll( ); NONVIRTUAL VOID RemoveLastEntry( ULONG HashValue, ULONG Index );
NONVIRTUAL VOID DumpHashTable( );
private:
NONVIRTUAL VOID Construct ( );
NONVIRTUAL VOID Destroy( );
PHASH_INDEX_ELEMENT _hashTable; USHORT _hash_table_size; USHORT _hash_table_mask; USHORT _hash_table_bits; USHORT _hash_element_increment; };
#endif // HASH_INDEX_DEFN
|