Helios++
Helios software for LiDAR simulations
ZipMultiSyncFileWriter.h
1 #pragma once
2 
3 #include <string>
4 #include <filems/write/comps/SimpleMultiSyncFileWriter.h>
5 #include <boost/iostreams/filtering_stream.hpp>
6 #include <boost/iostreams/filter/zlib.hpp>
7 #include <boost/archive/binary_oarchive.hpp>
8 
9 namespace helios { namespace filems{
10 
11 using std::string;
12 using std::unique_ptr;
13 using std::ios_base;
14 
22 template <typename ... WriteArgs>
24 protected:
25 using SimpleMultiSyncFileWriter<WriteArgs...>::ofs;
26  // *** ATTRIBUTES *** //
27  // ******************** //
31  std::vector<boost::iostreams::filtering_ostream> compressedOut;
35  std::vector<boost::iostreams::zlib_params> zp;
39  std::vector<unique_ptr<boost::archive::binary_oarchive>> oa;
40 
41 public:
42  // *** CONSTRUCTION / DESTRUCTION *** //
43  // ************************************ //
51  std::vector<std::string> const &path,
52  int compressionMode = boost::iostreams::zlib::best_compression
53  ) :
54  SimpleMultiSyncFileWriter<WriteArgs ...>(
55  path, ios_base::out | ios_base::binary
56  ),
57  compressedOut(path.size())
58  {
59  // Build and prepare each stream
60  size_t const nStreams = path.size();
61  for(size_t i = 0 ; i < nStreams ; ++i){
62  zp.emplace_back(boost::iostreams::zlib_params(compressionMode));
63  compressedOut[i].push(boost::iostreams::zlib_compressor(zp[i]));
64  compressedOut[i].push(ofs[i]);
65  oa.emplace_back(std::unique_ptr<boost::archive::binary_oarchive>(
66  new boost::archive::binary_oarchive(compressedOut[i])
67  ));
68  }
69  }
70  virtual ~ZipMultiSyncFileWriter() = default;
71 
72  // *** F I N I S H *** //
73  // ********************* //
81  void finish() override {
82  size_t const nStreams = this->path.size();
83  for(size_t i = 0 ; i < nStreams ; ++i){
84  oa[i] = nullptr;
85  }
86  //SimpleMultiSyncFileWriter<WriteArgs...>::finish(); // Must not call
87  }
88 
89 };
90 
91 }}
std::vector< std::string > path
Paths to the files to be written.
Definition: MultiSyncFileWriter.h:28
Abstract specialization of MultiSyncFileWriter to write output to many files. Each writing operation ...
Definition: SimpleMultiSyncFileWriter.h:15
std::vector< std::ofstream > ofs
Output file streams to be used by the simple multi synchronous file writer.
Definition: SimpleMultiSyncFileWriter.h:23
Abstract child of SimpleMultiSyncFileWriter which provides support for zipped output.
Definition: ZipMultiSyncFileWriter.h:23
ZipMultiSyncFileWriter(std::vector< std::string > const &path, int compressionMode=boost::iostreams::zlib::best_compression)
Build a ZipMultiSyncFileWriter.
Definition: ZipMultiSyncFileWriter.h:50
std::vector< boost::iostreams::filtering_ostream > compressedOut
Compressed output streams.
Definition: ZipMultiSyncFileWriter.h:31
std::vector< boost::iostreams::zlib_params > zp
ZLib compression parameters for each stream.
Definition: ZipMultiSyncFileWriter.h:35
std::vector< unique_ptr< boost::archive::binary_oarchive > > oa
Binary output archive for each steam.
Definition: ZipMultiSyncFileWriter.h:39
void finish() override
ZipSyncFileWriter finishes the binary output archive instead of calling its parent finish method....
Definition: ZipMultiSyncFileWriter.h:81