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