+
#include <stdexcept>
#include "bit-vector.hpp"
#include <cstdio>
+extern "C" {
+#include <unistd.h>
+}
static inline uint8_t pow2_mult8(uint8_t x){
return (~((x & (x-1))==0) + 1) & (x >> 3);
//sets the idxth bit to b
void bit_vector::set(size_t idx, bool b)
{
-
- size_t i = idx / W;
- size_t j = idx % W;
- grow(allocforsize(idx+1));
- if (idx >= _size)
- _size = idx+1;
- uint32_t mask = 1 << (W - 1 - j);
- if (b)
- _vector[i] |= mask;
- else
- _vector[i] &= ~mask;
+ size_t i = idx / W;
+ size_t j = idx % W;
+ grow(allocforsize(idx+1));
+ if (idx >= _size)
+ _size = idx+1;
+ uint32_t mask = 1 << (W - 1 - j);
+ if (b)
+ _vector[i] |= mask;
+ else
+ _vector[i] &= ~mask;
+}
+void bit_vector::set_le(size_t idx, bool b)
+{
+ size_t i = idx / W;
+ size_t j = idx % W;
+ grow(allocforsize(idx+1));
+ if (idx >= _size)
+ _size = idx+1;
+ uint32_t mask = 1 << j;
+ if (b)
+ _vector[i] |= mask;
+ else
+ _vector[i] &= ~mask;
}
void bit_vector::push_back(bool b)
array_copy(_vector,vector,_alloc);
return vector;
}
+
+void bit_vector::debug(void) const
+{
+ for(size_t i = 0; i < _size; i++)
+ fprintf(stderr, "%i ", get(i));
+ fprintf(stderr, "\n");
+
+
+}