X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=bit-vector.cpp;h=2c401a5e5fffdadace770261f26e982659bec55a;hb=daf6549ca274aaa8d9c0b3964c5502f0f0f08d7d;hp=5450989c742eec7f927c0dd5783f0caf62da2eaf;hpb=cd438c6db9deacac203891fd76a49a768ba53e70;p=SXSI%2FXMLTree.git diff --git a/bit-vector.cpp b/bit-vector.cpp index 5450989..2c401a5 100644 --- a/bit-vector.cpp +++ b/bit-vector.cpp @@ -1,6 +1,10 @@ + #include #include "bit-vector.hpp" #include +extern "C" { +#include +} static inline uint8_t pow2_mult8(uint8_t x){ return (~((x & (x-1))==0) + 1) & (x >> 3); @@ -146,17 +150,29 @@ void bit_vector::pack() //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) @@ -222,3 +238,12 @@ uint32_t * bit_vector::get_vector() const 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"); + + +}