windows-nt/Source/XPSP1/NT/base/fs/utils/ifsutil/inc/spaset.hxx

146 lines
2.6 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
spaset.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) 01-29-97
--*/
#if !defined(SPARSE_SET_DEFN)
#define SPARSE_SET_DEFN
#include "bigint.hxx"
#if defined ( _AUTOCHECK_ )
#define IFSUTIL_EXPORT
#elif defined ( _IFSUTIL_MEMBER_ )
#define IFSUTIL_EXPORT __declspec(dllexport)
#else
#define IFSUTIL_EXPORT __declspec(dllimport)
#endif
CONST USHORT SPA_SET_HASH_TABLE_SIZE = 256;
CONST ULONG SPA_SET_HASH_ELEMENT_INC = 50;
DECLARE_CLASS( SPARSE_SET );
typedef struct _HASH_ELEMENT {
BIG_INT elementCount; // number of elements in elements
BIG_INT maxElementCount; // max. number of elements in element
PBIG_INT elements; // pointer to an array of BIG_INTs
};
DEFINE_TYPE( _HASH_ELEMENT, HASH_ELEMENT );
class SPARSE_SET : public OBJECT {
public:
IFSUTIL_EXPORT
DECLARE_CONSTRUCTOR( SPARSE_SET );
VIRTUAL
IFSUTIL_EXPORT
~SPARSE_SET(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Initialize(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
CheckAndAdd(
IN BIG_INT Number,
OUT PBOOLEAN Duplicate DEFAULT NULL
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
RemoveAll(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
CheckAndRemove(
IN BIG_INT Number,
OUT PBOOLEAN DoesExists DEFAULT NULL
);
NONVIRTUAL
BIG_INT
QueryCardinality(
) CONST;
NONVIRTUAL
IFSUTIL_EXPORT
VOID
DumpHashTable(
);
private:
NONVIRTUAL
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
PHASH_ELEMENT _hashTable;
BIG_INT _card;
};
INLINE
BIG_INT
SPARSE_SET::QueryCardinality(
) CONST
/*++
Routine Description:
This routine computes the number of elements in the set.
Arguments:
None.
Return Value:
The number of elements in the set.
--*/
{
return _card;
}
#endif // SPARSE_SET_DEFN