Helios++
Helios software for LiDAR simulations
ZipMultiVectorialSyncFileMeasurementWriter.h
1 #pragma once
2 
3 #include <filems/write/comps/ZipMultiSyncFileWriter.h>
4 
5 #include <memory>
6 #include <vector>
7 
8 namespace helios { namespace filems{
9 
23  vector<Measurement> const &,
24  glm::dvec3 const &
25  >
26 {
27 protected:
28  // *** ATTRIBUTES *** //
29  // ******************** //
36  std::vector<ZipMeasurementWriteStrategy> zmws;
37 
38 public:
39  // *** CONSTRUCTION / DESTRUCTION *** //
40  // ************************************ //
46  vector<string> const &path,
47  int compressionMode = boost::iostreams::zlib::best_compression
48  ) :
50  vector<Measurement> const &,
51  glm::dvec3 const &
52  >(path, compressionMode)
53  {
54  // Build measurement write strategies
56  // Build vectorial write strategies
57  // WARNING : It must be done after building the measurement write
58  // strategies to be wrapped by the vectorial strategy. If the vector
59  // of measurements strategies is modified, then the references in the
60  // vectorial strategy objects will be inconsistent
62  }
63  virtual ~ZipMultiVectorialSyncFileMeasurementWriter() = default;
64 
65  // *** B U I L D *** //
66  // ********************* //
72  // Build measurement write strategies
73  size_t const nStreams = path.size();
74  for(size_t i = 0 ; i < nStreams ; ++i){
75  zmws.emplace_back(this->ofs[i], *(this->oa[i]));
76  }
77  }
86  // Build vectorial write strategies
87  size_t const nStreams = path.size();
88  for(size_t i = 0 ; i < nStreams ; ++i){
89  this->writeStrategy.push_back(make_shared<VectorialWriteStrategy<
91  glm::dvec3 const &
92  >>(zmws[i]));
93  }
94  }
95 
96  // *** W R I T E *** //
97  // ******************* //
102  vector<Measurement> const &measurements,
103  glm::dvec3 const &offset
104  ) override {return measurements[0].devIdx;}
105 
106 };
107 
108 }}
Class representing a measurement.
Definition: Measurement.h:13
std::vector< std::string > path
Paths to the files to be written.
Definition: MultiSyncFileWriter.h:28
std::vector< std::shared_ptr< WriteStrategy< WriteArgs ... > > > writeStrategy
The write strategies specifying how to write data, one per file.
Definition: MultiSyncFileWriter.h:37
std::vector< std::ofstream > ofs
Output file streams to be used by the simple multi synchronous file writer.
Definition: SimpleMultiSyncFileWriter.h:23
Concrete class specializing WriteStrategy to make any other write strategy operate over a vector.
Definition: VectorialWriteStrategy.h:23
Abstract child of SimpleMultiSyncFileWriter which provides support for zipped output.
Definition: ZipMultiSyncFileWriter.h:23
std::vector< unique_ptr< boost::archive::binary_oarchive > > oa
Binary output archive for each steam.
Definition: ZipMultiSyncFileWriter.h:39
Concrete class specializing ZipMultiSyncFileWriter to write a vector of measurements to multiple zip ...
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:26
size_t indexFromWriteArgs(vector< Measurement > const &measurements, glm::dvec3 const &offset) override
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:101
void buildMeasurementWriteStrategies()
Build the measurement write strategies for the zip multi vectorial synchronous file measurement write...
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:71
ZipMultiVectorialSyncFileMeasurementWriter(vector< string > const &path, int compressionMode=boost::iostreams::zlib::best_compression)
ZIP synchronous file measurement vector multi-writer constructor.
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:45
void buildVectorialWriteStrategies()
Build the vectorial write strategies for the zip multi vectorial synchronous file measurement writer.
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:85
std::vector< ZipMeasurementWriteStrategy > zmws
The measurement write strategies that are wrapped by the main write strategies in a vectorial fashion...
Definition: ZipMultiVectorialSyncFileMeasurementWriter.h:36