23 #ifndef CLOE_UTILITY_OUTPUT_SERIALIZER_HPP_ 24 #define CLOE_UTILITY_OUTPUT_SERIALIZER_HPP_ 30 #include <boost/algorithm/string/join.hpp> 31 #include <boost/assign/list_of.hpp> 32 #include <boost/bimap.hpp> 33 #include <boost/iostreams/copy.hpp> 34 #include <boost/iostreams/filter/bzip2.hpp> 35 #include <boost/iostreams/filter/gzip.hpp> 36 #include <boost/iostreams/filtering_streambuf.hpp> 37 #include <boost/range/adaptor/map.hpp> 38 #include <boost/range/algorithm/copy.hpp> 47 using char_iterator = std::vector<char>::iterator;
48 using uint8_iterator = std::vector<uint8_t>::iterator;
52 virtual std::string make_default_filename(
const std::string& default_filename) = 0;
53 virtual bool open_stream() = 0;
54 virtual void write(
const char* s, std::streamsize count) = 0;
55 virtual void close_stream() = 0;
61 template <
typename... TSerializerArgs>
66 : write_function_(write_function), instance_(instance) {}
68 virtual std::string make_default_filename(
const std::string& default_filename) = 0;
69 virtual void start_array() = 0;
70 virtual void serialize(TSerializerArgs... args) = 0;
71 virtual void end_array() = 0;
74 void write(
const std::string& str) { (instance_->*write_function_)(str.c_str(), str.length()); }
75 void write(
const std::vector<uint8_t>& data) {
76 (instance_->*write_function_)((
const char*)data.data(), data.size());
78 void (
OutputStream::*write_function_)(
const char*, std::streamsize);
81 template <
typename TSerializer,
typename TOutputStream>
82 friend class GndTruthSerializerImpl;
87 using OutputStream::OutputStream;
89 bool open_stream()
final {
return false; }
90 virtual bool open_file(
const std::string& filename,
const std::string& default_filename);
91 void write(
const char* s, std::streamsize count)
override { ofs_.write(s, count); }
92 void close_stream()
override;
100 using BasicFileOutputStream::BasicFileOutputStream;
102 std::string make_default_filename(
const std::string& default_filename)
override {
103 return default_filename;
112 bool open_file(
const std::string& filename,
const std::string& default_filename)
override;
113 void write(
const char* s, std::streamsize count)
override { out_.write(s, count); }
114 void close_stream()
override;
117 virtual void configure_filter() = 0;
120 boost::iostreams::filtering_streambuf<boost::iostreams::output> filter_;
126 using FilteringOutputStream::FilteringOutputStream;
128 std::string make_default_filename(
const std::string& default_filename)
override {
129 return default_filename +
".zip";
133 void configure_filter()
override {
134 filter_.push(boost::iostreams::gzip_compressor(
135 boost::iostreams::gzip_params(boost::iostreams::gzip::best_compression)));
141 using FilteringOutputStream::FilteringOutputStream;
143 std::string make_default_filename(
const std::string& default_filename)
override {
144 return default_filename +
".gz";
148 void configure_filter()
override {
149 filter_.push(boost::iostreams::gzip_compressor(
150 boost::iostreams::gzip_params(boost::iostreams::gzip::best_compression)));
156 using FilteringOutputStream::FilteringOutputStream;
158 std::string make_default_filename(
const std::string& default_filename)
override {
159 return default_filename +
".bz2";
163 void configure_filter()
override {
164 filter_.push(boost::iostreams::bzip2_compressor(
165 boost::iostreams::bzip2_params(boost::iostreams::bzip2::default_block_size)));
170 template <
typename TSerializer,
typename TOutputStream,
typename... TSerializerArgs>
174 : outputstream_(logger)
175 , serializer_((
void (
OutputStream::*)(
const char*, std::streamsize)) & TOutputStream::write,
178 virtual void open_file(
const std::string& filename,
const std::string& default_filename) {
179 outputstream_.open_file(filename, default_filename);
181 virtual void serialize(TSerializerArgs... args) { serializer_.serialize(args...); }
182 virtual void close_file() { outputstream_.close_stream(); }
185 TOutputStream outputstream_;
186 TSerializer serializer_;
190 template <
typename TSerializer,
typename TOutputStream,
typename... TSerializerArgs>
192 :
public FileSerializer<TSerializer, TOutputStream, TSerializerArgs...> {
197 void open_file(
const std::string& filename,
const std::string& default_filename)
override {
198 base::open_file(filename, default_filename);
201 void close_file()
override {
207 virtual void on_file_opened() = 0;
208 virtual void on_file_closing() = 0;
214 #endif // CLOE_UTILITY_OUTPUT_SERIALIZER_HPP_ Definition: output_serializer.hpp:45
SequentialFileSerializer is a FileSerializer for sequences of objects of the same type...
Definition: output_serializer.hpp:191
FileSerializer composes a TSerializer with a TOutputStream.
Definition: output_serializer.hpp:171
Definition: output_serializer.hpp:107
Definition: coordinator.hpp:36
Definition: output_serializer.hpp:98
Definition: output_serializer.hpp:85
Definition: enum_test.cpp:29
Definition: output_serializer.hpp:124
Definition: output_serializer.hpp:139
Definition: output_serializer.hpp:154
Definition: output_serializer.hpp:62