diff --git a/lib/src/BufferedWriter.cpp b/lib/src/BufferedWriter.cpp index 8f80943..0ad66ff 100644 --- a/lib/src/BufferedWriter.cpp +++ b/lib/src/BufferedWriter.cpp @@ -2,10 +2,10 @@ using namespace std; -BufferedWriter::BufferedWriter(const std::string& filename, size_t total_frames, hsize_t frames_per_file, - hsize_t initial_dataset_size, hsize_t dataset_increase_step) : +BufferedWriter::BufferedWriter(const std::string& filename, size_t total_frames, unique_ptr&& metadata_buffer, + hsize_t frames_per_file, hsize_t initial_dataset_size, hsize_t dataset_increase_step) : H5Writer(filename, frames_per_file, initial_dataset_size, dataset_increase_step), - total_frames(total_frames) + total_frames(total_frames), metadata_buffer(move(metadata_buffer)) { #ifdef DEBUG_OUTPUT using namespace date; @@ -22,12 +22,13 @@ BufferedWriter::BufferedWriter(const std::string& filename, size_t total_frames, DummyBufferedWriter::DummyBufferedWriter() : BufferedWriter("/dev/null", 0, 0, 0, 0){} std::unique_ptr get_buffered_writer(const string& filename, size_t total_frames, - hsize_t frames_per_file, hsize_t initial_dataset_size, hsize_t dataset_increase_step) + std::unique_ptr metadata_buffer, hsize_t frames_per_file, + hsize_t initial_dataset_size, hsize_t dataset_increase_step) { if (filename == "/dev/null") { return unique_ptr(new DummyBufferedWriter()); } else { - return unique_ptr(new BufferedWriter(filename, total_frames, + return unique_ptr(new BufferedWriter(filename, total_frames, move(metadata_buffer), frames_per_file, initial_dataset_size, dataset_increase_step)); } } \ No newline at end of file diff --git a/lib/src/BufferedWriter.hpp b/lib/src/BufferedWriter.hpp index a921104..e5304b6 100644 --- a/lib/src/BufferedWriter.hpp +++ b/lib/src/BufferedWriter.hpp @@ -2,14 +2,16 @@ #define BUFFEREDWRITER_H #include "H5Writer.hpp" +#include "MetadataBuffer.hpp" class BufferedWriter : public H5Writer { size_t total_frames; + std::unique_ptr metadata_buffer; public: - BufferedWriter(const std::string& filename, size_t total_frames, hsize_t frames_per_file=0, - hsize_t initial_dataset_size=1000, hsize_t dataset_increase_step=1000); + BufferedWriter(const std::string& filename, size_t total_frames, std::unique_ptr&& metadata_buffer, + hsize_t frames_per_file=0, hsize_t initial_dataset_size=1000, hsize_t dataset_increase_step=1000); }; class DummyBufferedWriter : public BufferedWriter @@ -19,6 +21,7 @@ class DummyBufferedWriter : public BufferedWriter }; std::unique_ptr get_buffered_writer(const std::string& filename, size_t total_frames, - hsize_t frames_per_file=0, hsize_t initial_dataset_size=1000, hsize_t dataset_increase_step=1000); + std::unique_ptr metadata_buffer, hsize_t frames_per_file=0, + hsize_t initial_dataset_size=1000, hsize_t dataset_increase_step=1000); #endif \ No newline at end of file diff --git a/lib/src/ProcessManager.cpp b/lib/src/ProcessManager.cpp index ac048f7..c7bf58a 100644 --- a/lib/src/ProcessManager.cpp +++ b/lib/src/ProcessManager.cpp @@ -149,8 +149,10 @@ void ProcessManager::receive_zmq() void ProcessManager::write_h5() { - auto writer = get_buffered_writer(writer_manager.get_output_file(), writer_manager.get_n_frames(), frames_per_file, - config::initial_dataset_size, config::dataset_increase_step); + auto metadata_buffer = unique_ptr(new MetadataBuffer(writer_manager.get_n_frames(), receiver.get_header_values_type())); + + auto writer = get_buffered_writer(writer_manager.get_output_file(), writer_manager.get_n_frames(), move(metadata_buffer), + frames_per_file, config::initial_dataset_size, config::dataset_increase_step); writer->create_file();