#ifndef _BITLIST_H
#define _BITLIST_H

#include "memblock.h"

class BitList {
public:
  BitList(unsigned int size=0) {
    setSize(size);
  }

  int getitem(int n) const { 
    if (n < 0 || n >= m_size) return 0; 
    return (m_list[n>>3]>>(n&7))&1;
  }
  void setitem(int n, int v) {
    if (n >= 0 && n < m_size) {
      int lv=1<<(n&7);
      if (v) m_list[n>>3]|=lv;
      else m_list[n>>3]&=~lv;
    }
  }
  
  int operator[](int n) const { return getitem(n); }

  int getSize() const {	// in bits
    return m_size;
  }
  void setSize(unsigned int newsize) {
    m_list.setSize((newsize+7)>>3);
    m_size = newsize;
  }
  
  int getsize() const { return m_size; }

private:
  MemBlock< uint8_t> m_list;
  int m_size;
};

#endif