NT4/private/utils/ifsutil/inc/numset.hxx
2020-09-30 17:12:29 +02:00

262 lines
4.2 KiB
C++

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
numset.hxx
Abstract:
This class implements a sparse number set. The number are
stored in ascending order.
Author:
Norbert P. Kusters (norbertk) 10-Jan-91
--*/
#if !defined(NUMBER_SET_DEFN)
#define NUMBER_SET_DEFN
#include "bigint.hxx"
#include "list.hxx"
#if defined ( _AUTOCHECK_ )
#define IFSUTIL_EXPORT
#elif defined ( _IFSUTIL_MEMBER_ )
#define IFSUTIL_EXPORT __declspec(dllexport)
#else
#define IFSUTIL_EXPORT __declspec(dllimport)
#endif
DECLARE_CLASS( NUMBER_SET );
class NUMBER_EXTENT : public OBJECT {
public:
DECLARE_CONSTRUCTOR( NUMBER_EXTENT );
BIG_INT Start;
BIG_INT Length;
};
DEFINE_POINTER_TYPES(NUMBER_EXTENT);
class NUMBER_SET : public OBJECT {
public:
IFSUTIL_EXPORT
DECLARE_CONSTRUCTOR( NUMBER_SET );
VIRTUAL
IFSUTIL_EXPORT
~NUMBER_SET(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Initialize(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Add(
IN BIG_INT Number
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
AddStart(
IN BIG_INT Number
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
AddNext(
IN BIG_INT Number
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Add(
IN BIG_INT Start,
IN BIG_INT Length
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Add(
IN PCNUMBER_SET NumberSet
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
CheckAndAdd(
IN BIG_INT Number,
OUT PBOOLEAN Duplicate
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Remove(
IN BIG_INT Number
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
RemoveAll(
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
CheckAndRemove(
IN BIG_INT Number,
OUT PBOOLEAN DoesExists
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Remove(
IN BIG_INT Start,
IN BIG_INT Length
);
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
Remove(
IN PCNUMBER_SET NumberSet
);
NONVIRTUAL
BIG_INT
QueryCardinality(
) CONST;
NONVIRTUAL
IFSUTIL_EXPORT
BIG_INT
QueryNumber(
IN BIG_INT Index
) CONST;
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
DoesIntersectSet(
IN BIG_INT Start,
IN BIG_INT Length
) CONST;
NONVIRTUAL
ULONG
QueryNumDisjointRanges(
) CONST;
NONVIRTUAL
IFSUTIL_EXPORT
VOID
QueryDisjointRange(
IN ULONG Index,
OUT PBIG_INT Start,
OUT PBIG_INT Length
) CONST;
NONVIRTUAL
IFSUTIL_EXPORT
BOOLEAN
QueryContainingRange(
IN BIG_INT Number,
OUT PBIG_INT Start,
OUT PBIG_INT Length
) CONST;
private:
NONVIRTUAL
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
LIST _list;
BIG_INT _card;
PITERATOR _iterator;
};
INLINE
BIG_INT
NUMBER_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;
}
INLINE
ULONG
NUMBER_SET::QueryNumDisjointRanges(
) CONST
/*++
Routine Description:
This routine computes the number of disjoint ranges contained
in this number set.
Arguments:
None.
Return Value:
The number of disjoint ranges contained in this number set.
--*/
{
return _list.QueryMemberCount();
}
#endif // NUMBER_SET_DEFN