5 /// Only ever assign into the first 24 bits in QC (so max is BIT(23)).
6 /// QC converts the float to int, performs the bit operation, then converts it back.
7 /// Assigning to the highest bits means some of the low ones might get lost due to float precision.
8 #define BIT(n) (1 << (n))
9 #define BITS(n) (BIT(n) - 1)
10 #ifndef BRANCHLESS_BITSET
11 #define BITSET(var, mask, flag) (flag ? (var) | (mask) : (var) & ~(mask))
13 #define BITSET(var, mask, flag) ((var) ^ (-(flag) ^ (var)) & (mask))
28 int randombit(int bits)
30 if (!(bits & (bits - 1))) // this ONLY holds for powers of two!
37 for (int f = 1; f <= bits; f *= 2)
44 else r = (r - 1) / (n - 1);
51 int randombits(int bits, int k, bool error_return)
54 while (k > 0 && bits != r)
56 r += randombit(bits - r);
66 void randombit_test(int bits, int iter)
70 LOG_INFO(ftos(randombit(bits)), "\n");
85 bool GiveBit(entity e, .int fld, int bit, int op, int val)
87 int v0 = (e.(fld) & bit);
91 if (val > 0) e.(fld) |= bit;
96 if (val > 0) e.(fld) |= bit;
99 if (val <= 0) e.(fld) &= ~bit;
102 if (val > 0) e.(fld) &= ~bit;
105 int v1 = (e.(fld) & bit);
110 bool GiveValue(entity e, .int fld, int op, int val)
119 e.(fld) = max(e.(fld), val); // min 100 cells = at least 100 cells
122 e.(fld) = min(e.(fld), val);