windows-nt/Source/XPSP1/NT/admin/burnslib/inc/bits.hpp
2020-09-26 16:20:57 +08:00

133 lines
1.6 KiB
C++

// Copyright (c) 1997-1999 Microsoft Corporation
//
// bit twiddling stuff
//
// 8-5-98 sburns
// One would think that after n decades of C, these would be builtin
// keywords...
// Returns state of bit n: true if it is set, false if not
//
// bits - set of bits
//
// n - bit to test
inline
bool
getbit(ULONG bits, unsigned int n)
{
if (bits & (1 << n))
{
return true;
}
return false;
}
// flips bit n (sets it to the opposite state), returns new state of bit n
//
// bits - set of bits.
//
// n - bit to flip
inline
bool
flipbit(ULONG& bits, unsigned int n)
{
return getbit((bits ^= (1 << n)), n);
}
// sets bit n to 1
//
// bits - set of bits
//
// n - bit to set
inline
void
setbit(ULONG& bits, unsigned int n)
{
bits |= (1 << n);
}
// sets bit n to 0
//
// bits - set of bits
//
// n - bit to clear
inline
void
clearbit(ULONG& bits, unsigned int n)
{
ULONG mask = (1 << n);
bits &= ~mask;
}
// Sets all bits in mask. Returns result
//
// bits - holds bits to be set
//
// mask - mask of bits to set
inline
DWORD
setbits(ULONG& bits, ULONG mask)
{
ASSERT(mask);
bits |= mask;
return bits;
}
// Clears all bits in mask. Returns result.
//
// bits - holds bits to be cleared
//
// mask - mask of bits to clear
inline
DWORD
clearbits(ULONG& bits, ULONG mask)
{
ASSERT(mask);
bits &= ~mask;
return bits;
}
// Toggles all bits in mask. bits that were set are cleared, and vice-
// versa. Returns result.
//
// bits - holds bits to be toggled
//
// mask - mask of bits to toggled
inline
DWORD
flipbits(ULONG& bits, ULONG mask)
{
bits ^= mask;
return bits;
}