16 #ifndef polybori_groebner_BitMask_h_
17 #define polybori_groebner_BitMask_h_
29 template <
unsigned NBits>
35 enum { nbits = 0, mask = (
unsigned long)0 };
37 unsigned long low(
const unsigned long& value)
const {
return 0; }
38 const unsigned long&
high(
const unsigned long& value)
const {
return value; }
39 const unsigned long&
shift(
const unsigned long& value)
const {
return value; }
40 unsigned long back(
const unsigned long& value)
const {
return 0; }
44 template <
unsigned NBits>
49 unsigned long low(
const unsigned long& value)
const {
52 unsigned long high(
const unsigned long& value)
const {
53 return value >> NBits;
55 unsigned long shift(
const unsigned long& value)
const {
56 return value << NBits;
58 unsigned long back(
const unsigned long& value)
const {
59 return value << (
sizeof(
unsigned long)*8 - NBits);
66 enum { nbits =
sizeof(
unsigned long)*8,
67 mask = ((
unsigned long)(
BitMask<nbits-1>::mask) << 1) | 0x1};
69 const unsigned long&
low(
const unsigned long& value)
const {
return value; }
70 unsigned long high(
const unsigned long& value)
const {
return 0; }
71 unsigned long shift(
const unsigned long& value)
const {
return 0; }
72 const unsigned long&
back(
const unsigned long& value)
const {
return value; }