
Joel wrote:
dynamic_bitset provides a constructor that takes raw data as input. If the source for that input has the bits ordered consecutively (which would allow one to change the block type without changing the ordering of the bits) then the constructor will not function properly.
Perhaps you could post a short example of some code that you think would fail? I was a bit surprised to find that it has this: template <typename Block> class dynamic_bitset { template <typename BlockInputIter> dynamic_bitset(BlockInputIter first, BlockInputIter last) { ... So you can do this: const char* data = ......; // From a "platform independent" binary file. dynamic_bitset<unsigned int> b(data,data+size); This probably doesn't do what you want, but not for endianness reasons; it seems to initialise each int-sized block with one byte of data, leaving the other 24 bits unset. If you write this: const char* data = ......; // From a "platform independent" binary file. dynamic_bitset<unsigned char> b(data,data+size); then I believe it will always work. If you write this: const char* data = ......; // From a "platform independent" binary file. const int* data_i = static_cast<const int*>(data); dynamic_bitset<int> b(data_i,data_i+size); then you get endianness problems. But you would have the same trouble if you tried to initialise e.g. a vector<int> in that way.
At minimum, the bit-ordering imposed by dynamic-bitset should be explicitly documented.
The BIT ordering? No, bit ordering is always the same. You never need to re-order the bits within a byte. (What am I missing?) Regards, Phil.