Я ищу реализацию набора битов с быстрым добавлением битов, где несколько битов могут быть эффективно добавлены за один раз.
, например
char value = 31;
char n_bits = 5;
fast_bitset bits;
bits.append(value, n_bits);
До сих пор я пробовал boost :: dynamic_bitset и std :: vector. Оба из которых медленные.
Старый пост
Я использую boost :: dynamic_bitset для упаковки некоторых данных.
Обычно я хочу упаковать ~ 5 бит за раз, что приведет к такому вызову:
char value = 31;
char n_bits = 5;
boost::dynamic_bitset<> bits;
for(char n = n_bits-1; n >= 0; --n)
bits.push_back((value >> n) & 1);
Однако это кажется мне совершенно неэффективным, разве нельзя добавить все биты за один раз?
, например
char value = 31;
char n_bits = 5;
boost::dynamic_bitset<> bits;
bits.append(value, n_bits);
Я бы ожидал, что это будет что-то вроде:
template<typename T>
void append(T value, size_t n_bits)
{
value <<= sizeof(T) - n_bits; // Make target bits most significant, remove all non-target bits.
// TODO: Shift bits into proper place and use OR to add all target bits to bitset in one go
}
Почему у dynamic_bitset такой функции нет? Можно ли будет эффективно реализовать?