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 ofm_bits
(and subsequentresize()
).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.