複数のビットを一度に効率的に追加できる高速ビット追加機能を備えたビットセットの実装を探しています。
例えば
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 にそのような機能がないのはなぜですか? 効率的に実装できるでしょうか?