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.
90 lines
2.1 KiB
90 lines
2.1 KiB
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
bitset.h
|
|
|
|
Abstract:
|
|
|
|
Macro definitions that implement operations on a BITSET type.
|
|
|
|
Author:
|
|
|
|
Gor Nishanov Aug-1998
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __BITSET_H
|
|
#define __BITSET_H
|
|
|
|
/************************************************************************
|
|
* BitsetInit,
|
|
* BitsetUnion,
|
|
* BitsetIntersection,
|
|
* BitsetDifference,
|
|
* BitsetCompare,
|
|
* BitsetSubsetOf,
|
|
* BitsetComplement,
|
|
* BitsetMember,
|
|
* BitsetInsert,
|
|
* BitsetDelete,
|
|
* BitsetCopy,
|
|
* BitsetEmpty
|
|
* =================
|
|
*
|
|
* Description:
|
|
*
|
|
* Macro definitions that implement operations on a BITSET type.
|
|
* Be very careful with argument order.
|
|
*
|
|
************************************************************************/
|
|
typedef DWORD BITSET;
|
|
|
|
#define BITSET_BIT_COUNT (sizeof(BITSET) * 8)
|
|
|
|
#ifndef BITSET_SKEW
|
|
# define BITSET_SKEW ClusterMinNodeId
|
|
#endif
|
|
|
|
/* Operations */
|
|
#define BitsetUnion(a,b) ((a)|(b))
|
|
#define BitsetIntersection(a,b) ((a)&(b))
|
|
#define BitsetDifference(a,b) ((a)&~(b))
|
|
#define BitsetEquals(a,b) ((a)==(b))
|
|
#define BitsetIsSubsetOf(small,big) BitsetDifference(small,big)
|
|
#define BitsetIsEmpty(b) ((b) == 0)
|
|
#define BitsetFromUnit(unit) ( (1 << (unit - BITSET_SKEW)) )
|
|
#define BitsetIsMember(unit,set) ( BitsetFromUnit(unit) & (set) )
|
|
#define BitsetIsNotMember(unit,set) ( !BitsetIsMember(unit,set) )
|
|
|
|
/* Statements */
|
|
#define BitsetInit(set) \
|
|
do { (set) = 0; } while(0)
|
|
|
|
#define BitsetRemove(set, unit) \
|
|
do { (set) &= ~BitsetFromUnit(unit); } while(0)
|
|
|
|
#define BitsetAdd(set, unit) \
|
|
do { (set) |= BitsetFromUnit(unit); } while(0)
|
|
|
|
#define BitsetAssign(dest,src) \
|
|
do { (dest) = (src); } while(0)
|
|
|
|
#define BitsetMergeWith(dest,src) \
|
|
do { (dest) |= (src); } while(0)
|
|
|
|
#define BitsetSubtract(dest,src) \
|
|
do { (dest) &= ~(src); } while(0)
|
|
|
|
#define BitsetIntersectWith(dest,src) \
|
|
do { (dest) &= (src); } while(0)
|
|
|
|
|
|
#endif // __BITSET_H
|
|
|
|
|