60 void Clip(
size_t bit_count);
71 void Set(
size_t index);
77 void Unset(
size_t index);
84 bool Get(
size_t index)
const;
90 void Flip(
size_t index);
98 template <
typename IntegerType = u
int64_t>
99 IntegerType
GetInt(
size_t bit_index,
size_t bit_width)
const {
100 assert((bit_index + bit_width) <= this->bit_count_);
101 return ReadInt<IntegerType>(this->bytes_.data(), bit_index, bit_width);
111 template <
typename IntegerType = u
int64_t>
112 void SetInt(IntegerType value,
size_t bit_index,
size_t bit_width) {
113 assert((bit_index + bit_width) <= this->bit_count_);
114 WriteInt<IntegerType>(this->bytes_.data(), bit_index, bit_width, value);
127 size_t source_start_bit_offset,
size_t bits_to_copy)
const;
149 size_t ToString(
char* buffer,
size_t buffer_length)
const;
156 void FromString(
const char* buffer,
size_t buffer_length);
169 size_t ToStringHex(
char* buffer,
size_t buffer_length)
const;
177 void FromStringHex(
const char* buffer,
size_t buffer_length);
183 const std::vector<std::byte>&
GetBytes()
const;
195 void Resize(
size_t bit_count);
201 template <
typename IntegerType = u
int64_t>
202 static void WriteInt(std::byte* bytes,
size_t start_bit_index,
203 size_t bits_to_copy, IntegerType value) {
204 assert(bits_to_copy <= CHAR_BIT *
sizeof(IntegerType));
205 WriteBytes(
reinterpret_cast<std::byte*
>(&value), 0, bytes, start_bit_index,
213 template <
typename IntegerType = u
int64_t>
214 static IntegerType
ReadInt(
const std::byte* bytes,
size_t start_bit_index,
215 size_t bits_to_copy) {
216 assert(bits_to_copy <= CHAR_BIT *
sizeof(IntegerType));
217 IntegerType value = 0;
218 WriteBytes(bytes, start_bit_index,
reinterpret_cast<std::byte*
>(&value), 0,
229 static void WriteBytes(
const std::byte* source,
230 size_t source_start_bit_offset, std::byte* destination,
231 size_t destination_start_bit_offset,
232 size_t bits_to_copy);
239 static bool Compare(
const std::byte* left,
const std::byte* right,
240 size_t bits_to_compare);
265 friend std::ostream& operator<<(std::ostream& out,
const BitVector& bv);
268 void WriteToStream(std::ostream& out)
const;
269 void WriteToStreamHex(std::ostream& out)
const;
275 std::vector<std::byte> bytes_;
282 size_t bit_count_ = 0;
287 #endif // BITVECTOR_H__
void SetInt(IntegerType value, size_t bit_index, size_t bit_width)
Definition: BitVector.h:112
void Clip(size_t bit_count)
Definition: BitVector.cc:187
bool Get(size_t index) const
Definition: BitVector.cc:224
void SetBitCount(size_t bit_count)
Definition: BitVector.cc:182
size_t HammingDistance(const BitVector &rhs) const
Definition: BitVector.cc:246
void FromStringHex(const char *buffer, size_t buffer_length)
Definition: BitVector.cc:339
size_t ToString(char *buffer, size_t buffer_length) const
Definition: BitVector.cc:286
size_t ToStringHex(char *buffer, size_t buffer_length) const
Definition: BitVector.cc:313
bool Equals(const BitVector &rhs, size_t bits_to_compare) const
Definition: BitVector.cc:275
const std::vector< std::byte > & GetBytes() const
Definition: BitVector.cc:62
void SubVector(BitVector *destination, size_t destination_start_bit_offset, size_t source_start_bit_offset, size_t bits_to_copy) const
Definition: BitVector.cc:234
static HexFormat_t HexFormat
Definition: BitVector.h:261
IntegerType GetInt(size_t bit_index, size_t bit_width) const
Definition: BitVector.h:99
void Resize(size_t bit_count)
Definition: BitVector.cc:164
static IntegerType ReadInt(const std::byte *bytes, size_t start_bit_index, size_t bits_to_copy)
Definition: BitVector.h:214
void FromString(const char *buffer, size_t buffer_length)
Definition: BitVector.cc:299
static void WriteBytes(const std::byte *source, size_t source_start_bit_offset, std::byte *destination, size_t destination_start_bit_offset, size_t bits_to_copy)
Definition: BitVector.cc:67
Definition: BitVector.h:19
std::vector< std::byte > & GetBytesWritable()
Definition: BitVector.cc:64
void Clear()
Definition: BitVector.cc:160
void Flip(size_t index)
Definition: BitVector.cc:197
BitVector & operator=(const BitVector &rhs)
Definition: BitVector.cc:54
void Set(size_t index)
Definition: BitVector.cc:206
static void WriteInt(std::byte *bytes, size_t start_bit_index, size_t bits_to_copy, IntegerType value)
Definition: BitVector.h:202
static bool Compare(const std::byte *left, const std::byte *right, size_t bits_to_compare)
Definition: BitVector.cc:141
size_t GetBitCount() const
Definition: BitVector.cc:195
void Unset(size_t index)
Definition: BitVector.cc:215