Remove spurious printfs.
[SXSI/XMLTree.git] / bit-vector.cpp
index d69c177..2c401a5 100644 (file)
@@ -1,5 +1,10 @@
+
 #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);
@@ -11,10 +16,9 @@ static inline size_t uint32bits(size_t bits){
 }
 
 
-
-void array_copy(const uint32_t * src, uint32_t * dst, size_t len)
+static void array_copy(const uint32_t * src, uint32_t * dst, size_t len)
 {
-  while (len--) *dst++ = *src++;
+  for(size_t i = 0; i < len; i++) dst[i] = src[i];
 }
 
 size_t bit_vector::allocforsize(size_t bits)
@@ -135,27 +139,40 @@ void bit_vector::pack()
 
   size_t nalloc = uint32bits(_size);
   uint32_t * nvector = new uint32_t[nalloc];
-  array_copy(_vector,nvector,nalloc);
-  if (!_leaked) delete [] _vector;
+  array_copy(_vector, nvector, nalloc);
+  if (!_leaked && _vector) delete [] _vector;
   _alloc = nalloc;
-  _vector = nvector;
-  _leaked = false;
+  this->_vector = nvector;
+  this->_leaked = false;
 
 }
 
 //sets the idxth bit to b
 void bit_vector::set(size_t idx, bool b)
 {
-    size_t i = idx / sizeof(uint32_t);
-    size_t j = idx % sizeof(uint32_t);
-    grow(allocforsize(idx+1));
-    if (idx >= _size)
-      _size = idx+1;
-    uint32_t mask = 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)
@@ -221,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");
+  
+
+}