static void test_u1(TestBatch *batch) { size_t count = 64; uint64_t *ints = TestUtils_random_u64s(NULL, count, 0, 2); size_t amount = count / 8; uint8_t *bits = (uint8_t*)CALLOCATE(amount, sizeof(uint8_t)); for (size_t i = 0; i < count; i++) { if (ints[i]) { NumUtil_u1set(bits, i); } } for (size_t i = 0; i < count; i++) { TEST_INT_EQ(batch, NumUtil_u1get(bits, i), (long)ints[i], "u1 set/get"); } for (size_t i = 0; i < count; i++) { NumUtil_u1flip(bits, i); } for (size_t i = 0; i < count; i++) { TEST_INT_EQ(batch, NumUtil_u1get(bits, i), !ints[i], "u1 flip"); } FREEMEM(bits); FREEMEM(ints); }
static void S_write_ord(void *ords, int32_t width, int32_t doc_id, int32_t ord) { switch (width) { case 1: if (ord) { NumUtil_u1set(ords, doc_id); } else { NumUtil_u1clear(ords, doc_id); } break; case 2: NumUtil_u2set(ords, doc_id, ord); break; case 4: NumUtil_u4set(ords, doc_id, ord); break; case 8: { uint8_t *ints = (uint8_t*)ords; ints[doc_id] = ord; } break; case 16: { uint8_t *bytes = (uint8_t*)ords; bytes += doc_id * sizeof(uint16_t); NumUtil_encode_bigend_u16(ord, &bytes); } break; case 32: { uint8_t *bytes = (uint8_t*)ords; bytes += doc_id * sizeof(uint32_t); NumUtil_encode_bigend_u32(ord, &bytes); } break; default: THROW(ERR, "Invalid width: %i32", width); } }
void BitVec_set(BitVector *self, uint32_t tick) { if (tick >= self->cap) { uint32_t new_cap = (uint32_t)Memory_oversize(tick + 1, 0); BitVec_Grow(self, new_cap); } NumUtil_u1set(self->bits, tick); }
void BitVec_Set_IMP(BitVector *self, size_t tick) { BitVectorIVARS *const ivars = BitVec_IVARS(self); if (tick >= ivars->cap) { size_t new_cap = (size_t)Memory_oversize(tick + 1, 0); BitVec_Grow(self, new_cap); } NumUtil_u1set(ivars->bits, tick); }