5 #include <boost/serialization/serialization.hpp> 
    6 #include <boost/serialization/vector.hpp> 
    7 #include <boost/archive/text_iarchive.hpp> 
    8 #include <boost/archive/text_oarchive.hpp> 
    9 #include <boost/iostreams/filtering_streambuf.hpp> 
   10 #include <boost/iostreams/filter/bzip2.hpp> 
   17     const size_t split_limit = 8*1024;
 
   19     void write_vector(std::ostream& os, 
const std::vector<T>& data)
 
   21       boost::iostreams::filtering_streambuf<boost::iostreams::output> filter;
 
   22       filter.push(boost::iostreams::bzip2_compressor());
 
   24       std::ostream 
out(&filter);
 
   26       boost::archive::text_oarchive oa(
out);
 
   27       if (data.size() <= split_limit) {
 
   31         for (
size_t p=0; p<data.size(); p+=split_limit) {
 
   32           std::vector<T> tmp(data.begin()+p,
 
   43 write(std::ostream& os, 
const std::vector<int>& data)
 
   45   write_vector(os, data);
 
   48 write(std::ostream& os, 
const std::vector<double>& data)
 
   50   write_vector(os, data);
 
   56   : state(new 
State(is))
 
   67   boost::iostreams::filtering_streambuf<boost::iostreams::input> 
filter;
 
   68   boost::scoped_ptr<std::istream> 
in;
 
   69   boost::scoped_ptr<boost::archive::text_iarchive> 
ia;
 
   70   explicit State(std::istream &is)
 
   74     filter.push(boost::iostreams::bzip2_decompressor());
 
   76     in.reset(
new std::istream(&filter));
 
   77     ia.reset(
new boost::archive::text_iarchive(*in));
 
   83     return (*ia) >> data, *in;
 
   91   return state->read_vector(data);
 
  108   explicit State(std::istream& is) : reader(is), cur(0), failed(!is)
 
  114     return cur < data.size();
 
  119       throw std::logic_error(
"no data in BinaryReader::read");
 
  124     if (cur < data.size())
 
  129       failed = ! reader.read(data);
 
  130     } 
catch (boost::archive::archive_exception& e) {
 
  132         std::cerr << 
"read failed in BinaryReader " << e.what();
 
  141   : state(new 
State(is))
 
  152   return state->hasNext();
 
  158   return state->failed;
 
  163   return state->read();