5 #define BIT(n) (1 << (n))
6 #define BITS(n) (BIT(n) - 1)
7 #ifndef BRANCHLESS_BITSET
8 #define BITSET(var, mask, flag) (flag ? (var) | (mask) : (var) & ~(mask))
10 #define BITSET(var, mask, flag) ((var) ^ (-(flag) ^ (var)) & (mask))
23 int randombit(int bits)
25 if (!(bits & (bits - 1))) // this ONLY holds for powers of two!
32 for (int f = 1; f <= bits; f *= 2)
39 else r = (r - 1) / (n - 1);
45 int randombits(int bits, int k, bool error_return)
48 while (k > 0 && bits != r)
50 r += randombit(bits - r);
59 void randombit_test(int bits, int iter)
63 LOG_INFO(ftos(randombit(bits)), "\n");
76 bool GiveBit(entity e, .int fld, int bit, int op, int val)
78 int v0 = (e.(fld) & bit);
82 if (val > 0) e.(fld) |= bit;
87 if (val > 0) e.(fld) |= bit;
90 if (val <= 0) e.(fld) &= ~bit;
93 if (val > 0) e.(fld) &= ~bit;
96 int v1 = (e.(fld) & bit);
100 bool GiveValue(entity e, .int fld, int op, int val)
109 e.(fld) = max(e.(fld), val); // min 100 cells = at least 100 cells
112 e.(fld) = min(e.(fld), val);