67 typedef u32 BitUnitType;
68 static const u32 BITS_PER_UNIT =
sizeof(BitUnitType) * CHAR_BIT;
70 static const u32 ARRAY_LENGTH = (BITS + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
73 BitUnitType m_bits[ARRAY_LENGTH];
81 inline void WriteToUnit(
const u32 idx,
const u32 startIdx,
const u32 length,
const u32 value) {
82 if (length == 0)
return;
83 const u32 shift = BITS_PER_UNIT - (startIdx + length);
84 u32 mask = MakeMaskClip(length) << shift;
85 m_bits[idx] = (m_bits[idx] & ~mask) | ((value << shift) & mask);
94 inline u32 ReadFromUnit(
const u32 idx,
const u32 startIdx,
const u32 length)
const {
95 if (length==0) {
return 0; }
96 if(idx >= ARRAY_LENGTH) abort();
97 const u32 shift = BITS_PER_UNIT - (startIdx + length);
98 return (m_bits[idx] >> shift) & MakeMaskClip(length);
157 inline u32
Read(
const u32 startIdx,
const u32 length)
const;
171 void Write(
const u32 startIdx,
const u32 length,
const u32 value);
185 inline u64
ReadLong(
const u32 startIdx,
const u32 length)
const;
199 void WriteLong(
const u32 startIdx,
const u32 length,
const u64 value);
229 return Read(idx, 1) != 0;
252 void SetBits(
const u32 startIdx,
const u32 length) {
290 void StoreBits(
const u32 bits,
const u32 startIdx,
const u32 length) ;
343 bool operator==(
const BitVector & rhs)
const;
348 #include "BitVector.tcc"
u32 GetLength() const
Definition: BitVector.h:62
void Write(const u32 startIdx, const u32 length, const u32 value)
Definition: BitVector.tcc:99
void Clear()
Definition: BitVector.tcc:26
u32 Read(const u32 startIdx, const u32 length) const
Definition: BitVector.tcc:129
bool ReadBit(const u32 idx) const
Definition: BitVector.h:228
void ClearBits(const u32 startIdx, const u32 length)
Definition: BitVector.h:267
void WriteBit(u32 idx, bool bit)
Definition: BitVector.tcc:41
void Print(ByteSink &ostream) const
Definition: BitVector.tcc:202
void StoreBits(const u32 bits, const u32 startIdx, const u32 length)
Definition: BitVector.tcc:160
void ClearBit(const u32 idx)
Definition: BitVector.h:217
Definition: ByteSource.h:44
bool ToggleBit(const u32 idx)
Definition: BitVector.tcc:54
void SetBit(const u32 idx)
Definition: BitVector.h:207
bool ReadBinary(ByteSource &bs)
Definition: BitVector.tcc:239
Definition: ByteSink.h:47
void PrintBinary(ByteSink &ostream) const
Definition: BitVector.tcc:209
void SetBits(const u32 startIdx, const u32 length)
Definition: BitVector.h:252
bool ReadBit(u32 idx)
Definition: BitVector.tcc:65
BitVector()
Definition: BitVector.tcc:8
Definition: BitVector.h:47
void WriteLong(const u32 startIdx, const u32 length, const u64 value)
Definition: BitVector.tcc:87
u64 ReadLong(const u32 startIdx, const u32 length) const
Definition: BitVector.tcc:74