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))
25 int randombit(int bits)
27 if (!(bits & (bits - 1))) // this ONLY holds for powers of two!
34 for (int f = 1; f <= bits; f *= 2)
41 else r = (r - 1) / (n - 1);
48 int randombits(int bits, int k, bool error_return)
51 while (k > 0 && bits != r)
53 r += randombit(bits - r);
63 void randombit_test(int bits, int iter)
67 LOG_INFO(ftos(randombit(bits)), "\n");
82 bool GiveBit(entity e, .int fld, int bit, int op, int val)
84 int v0 = (e.(fld) & bit);
88 if (val > 0) e.(fld) |= bit;
93 if (val > 0) e.(fld) |= bit;
96 if (val <= 0) e.(fld) &= ~bit;
99 if (val > 0) e.(fld) &= ~bit;
102 int v1 = (e.(fld) & bit);
107 bool GiveValue(entity e, .int fld, int op, int val)
116 e.(fld) = max(e.(fld), val); // min 100 cells = at least 100 cells
119 e.(fld) = min(e.(fld), val);