#include "bitops.h"
namespace NBitOps {
namespace NPrivate {
const ui64 WORD_MASK[] = {
0x0000000000000000ULL,
0x0000000000000001ULL,
0x0000000000000003ULL,
0x0000000000000007ULL,
0x000000000000000FULL,
0x000000000000001FULL,
0x000000000000003FULL,
0x000000000000007FULL,
0x00000000000000FFULL,
0x00000000000001FFULL,
0x00000000000003FFULL,
0x00000000000007FFULL,
0x0000000000000FFFULL,
0x0000000000001FFFULL,
0x0000000000003FFFULL,
0x0000000000007FFFULL,
0x000000000000FFFFULL,
0x000000000001FFFFULL,
0x000000000003FFFFULL,
0x000000000007FFFFULL,
0x00000000000FFFFFULL,
0x00000000001FFFFFULL,
0x00000000003FFFFFULL,
0x00000000007FFFFFULL,
0x0000000000FFFFFFULL,
0x0000000001FFFFFFULL,
0x0000000003FFFFFFULL,
0x0000000007FFFFFFULL,
0x000000000FFFFFFFULL,
0x000000001FFFFFFFULL,
0x000000003FFFFFFFULL,
0x000000007FFFFFFFULL,
0x00000000FFFFFFFFULL,
0x00000001FFFFFFFFULL,
0x00000003FFFFFFFFULL,
0x00000007FFFFFFFFULL,
0x0000000FFFFFFFFFULL,
0x0000001FFFFFFFFFULL,
0x0000003FFFFFFFFFULL,
0x0000007FFFFFFFFFULL,
0x000000FFFFFFFFFFULL,
0x000001FFFFFFFFFFULL,
0x000003FFFFFFFFFFULL,
0x000007FFFFFFFFFFULL,
0x00000FFFFFFFFFFFULL,
0x00001FFFFFFFFFFFULL,
0x00003FFFFFFFFFFFULL,
0x00007FFFFFFFFFFFULL,
0x0000FFFFFFFFFFFFULL,
0x0001FFFFFFFFFFFFULL,
0x0003FFFFFFFFFFFFULL,
0x0007FFFFFFFFFFFFULL,
0x000FFFFFFFFFFFFFULL,
0x001FFFFFFFFFFFFFULL,
0x003FFFFFFFFFFFFFULL,
0x007FFFFFFFFFFFFFULL,
0x00FFFFFFFFFFFFFFULL,
0x01FFFFFFFFFFFFFFULL,
0x03FFFFFFFFFFFFFFULL,
0x07FFFFFFFFFFFFFFULL,
0x0FFFFFFFFFFFFFFFULL,
0x1FFFFFFFFFFFFFFFULL,
0x3FFFFFFFFFFFFFFFULL,
0x7FFFFFFFFFFFFFFFULL,
0xFFFFFFFFFFFFFFFFULL,
};
const ui64 INVERSE_WORD_MASK[] = {
~0x0000000000000000ULL,
~0x0000000000000001ULL,
~0x0000000000000003ULL,
~0x0000000000000007ULL,
~0x000000000000000FULL,
~0x000000000000001FULL,
~0x000000000000003FULL,
~0x000000000000007FULL,
~0x00000000000000FFULL,
~0x00000000000001FFULL,
~0x00000000000003FFULL,
~0x00000000000007FFULL,
~0x0000000000000FFFULL,
~0x0000000000001FFFULL,
~0x0000000000003FFFULL,
~0x0000000000007FFFULL,
~0x000000000000FFFFULL,
~0x000000000001FFFFULL,
~0x000000000003FFFFULL,
~0x000000000007FFFFULL,
~0x00000000000FFFFFULL,
~0x00000000001FFFFFULL,
~0x00000000003FFFFFULL,
~0x00000000007FFFFFULL,
~0x0000000000FFFFFFULL,
~0x0000000001FFFFFFULL,
~0x0000000003FFFFFFULL,
~0x0000000007FFFFFFULL,
~0x000000000FFFFFFFULL,
~0x000000001FFFFFFFULL,
~0x000000003FFFFFFFULL,
~0x000000007FFFFFFFULL,
~0x00000000FFFFFFFFULL,
~0x00000001FFFFFFFFULL,
~0x00000003FFFFFFFFULL,
~0x00000007FFFFFFFFULL,
~0x0000000FFFFFFFFFULL,
~0x0000001FFFFFFFFFULL,
~0x0000003FFFFFFFFFULL,
~0x0000007FFFFFFFFFULL,
~0x000000FFFFFFFFFFULL,
~0x000001FFFFFFFFFFULL,
~0x000003FFFFFFFFFFULL,
~0x000007FFFFFFFFFFULL,
~0x00000FFFFFFFFFFFULL,
~0x00001FFFFFFFFFFFULL,
~0x00003FFFFFFFFFFFULL,
~0x00007FFFFFFFFFFFULL,
~0x0000FFFFFFFFFFFFULL,
~0x0001FFFFFFFFFFFFULL,
~0x0003FFFFFFFFFFFFULL,
~0x0007FFFFFFFFFFFFULL,
~0x000FFFFFFFFFFFFFULL,
~0x001FFFFFFFFFFFFFULL,
~0x003FFFFFFFFFFFFFULL,
~0x007FFFFFFFFFFFFFULL,
~0x00FFFFFFFFFFFFFFULL,
~0x01FFFFFFFFFFFFFFULL,
~0x03FFFFFFFFFFFFFFULL,
~0x07FFFFFFFFFFFFFFULL,
~0x0FFFFFFFFFFFFFFFULL,
~0x1FFFFFFFFFFFFFFFULL,
~0x3FFFFFFFFFFFFFFFULL,
~0x7FFFFFFFFFFFFFFFULL,
~0xFFFFFFFFFFFFFFFFULL,
};
}
}