How to serialize boost::dynamic_bitset?

I went ahead and filed the pull request to add Serialization support to Boost Dynamic Bitset

Serialization using the public interface isn’t optimal as to_block_range()/from_block_range() require copying of m_bits (and subsequent resize()).

I added a generic implementation to Boost Dynamic Bitset. The changes merge cleanly against develop or master (1_58_0).

Changes

Implementation added with

  • minimal intrusiveness, only a nested friend (class serialization_impl;) has been forward declared to “key-hole” the required friend access through
  • This class, as well as the actual ADL hook for Boost Serialization are implemented in a separate header (dynamic_bitset/serialization.hpp, similar to other boost libraries with serialization support).
  • This means that zero dependencies on Boost Serialization stuff exists unless boost/dynamic_bitset/serialization.hpp is actually included
  • Zero copy is achieved (leveraging std::vector<Block>‘s builtin support in Boost Serialization)

Tests

The second commit in the pull request adds tests for this feature. I’m not sure how to add the dyn_bitset_unit_tests5.cpp to the Jamfile. I suppose something else must be done to ensure linking to Boost System and Boost Serialization. I have run the tests myself using a simple wrapper:

#include <modular-boost/libs/dynamic_bitset/dyn_bitset_unit_tests5.cpp>

int main() {
    test_main(0, nullptr);
}

Which can then be compiled and run with e.g.

g++ main.cpp -lboost_system -lboost_serialization && ./a.out

No output means no errors.

Leave a Comment