diff --git a/core-writer/include/BufferedWriter.hpp b/core-writer/include/BufferedWriter.hpp index b8e6b75..5f73f2d 100644 --- a/core-writer/include/BufferedWriter.hpp +++ b/core-writer/include/BufferedWriter.hpp @@ -6,47 +6,24 @@ class BufferedWriter : public H5Writer { - size_t total_frames; - std::unique_ptr metadata_buffer; + const size_t total_frames; + MetadataBuffer& metadata_buffer; public: - 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); - virtual void cache_metadata(std::string name, uint64_t frame_index, const char* data); + BufferedWriter( + const std::string& filename, + const size_t total_frames, + MetadataBuffer& metadata_buffer, + hsize_t frames_per_file=0, + hsize_t initial_dataset_size=1000, + hsize_t dataset_increase_step=1000); + + virtual void cache_metadata( + const std::string& name, + const uint64_t frame_index, + const char* data); + virtual void write_metadata_to_file(); }; -class DummyBufferedWriter : public BufferedWriter, public DummyH5Writer -{ - public: - DummyBufferedWriter() : BufferedWriter("/dev/null", 0, 0, 0, 0) {} - void cache_metadata(std::string name, uint64_t frame_index, const char* data) override {} - void write_metadata_to_file() override {} - - bool is_file_open() const override - { return DummyH5Writer::is_file_open(); } - - void create_file(const hsize_t frame_chunk=1) override - { return DummyH5Writer::create_file(frame_chunk); } - - void close_file() override - { return DummyH5Writer::close_file(); } - - void write_data(const std::string& dataset_name, const size_t data_index, const char* data, const std::vector& data_shape, - const size_t data_bytes_size, const std::string& data_type, const std::string& endianness) override - { - return DummyH5Writer::write_data ( - dataset_name, data_index, data, data_shape, data_bytes_size, data_type, endianness ); - } - - H5::H5File& get_h5_file() override - { return DummyH5Writer::get_h5_file(); } - - bool is_data_for_current_file(const size_t data_index) override - { return DummyH5Writer::is_data_for_current_file(data_index); } -}; - -std::unique_ptr get_buffered_writer(const std::string& filename, size_t total_frames, - std::unique_ptr metadata_buffer, hsize_t frames_per_file=0, hsize_t dataset_increase_step=1000); - #endif \ No newline at end of file diff --git a/core-writer/src/writer/BufferedWriter.cpp b/core-writer/src/writer/BufferedWriter.cpp index 98e2fe0..73f8ae9 100644 --- a/core-writer/src/writer/BufferedWriter.cpp +++ b/core-writer/src/writer/BufferedWriter.cpp @@ -6,10 +6,20 @@ using namespace std; -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), metadata_buffer(move(metadata_buffer)) +BufferedWriter::BufferedWriter( + const std::string& filename, + size_t total_frames, + MetadataBuffer& 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), + metadata_buffer(metadata_buffer) { #ifdef DEBUG_OUTPUT using namespace date; @@ -23,15 +33,20 @@ BufferedWriter::BufferedWriter(const std::string& filename, size_t total_frames, #endif } -void BufferedWriter::cache_metadata(string name, uint64_t frame_index, const char* data) +void BufferedWriter::cache_metadata( + const string& name, + const uint64_t frame_index, + const char* data) { - auto relative_frame_index = get_relative_data_index(static_cast(frame_index)); - metadata_buffer->add_metadata_to_buffer(name, relative_frame_index, data); + auto relative_frame_index = + get_relative_data_index(static_cast(frame_index)); + + metadata_buffer.add_metadata_to_buffer(name, relative_frame_index, data); } void BufferedWriter::write_metadata_to_file() { - auto header_values_type = metadata_buffer->get_header_values_type(); + auto header_values_type = metadata_buffer.get_header_values_type(); if (header_values_type) { for (const auto& header_type : *header_values_type) { @@ -40,27 +55,22 @@ void BufferedWriter::write_metadata_to_file() vector data_shape = {header_data_type.value_shape}; - create_dataset(dataset_name, data_shape, header_data_type.type, header_data_type.endianness, false, - metadata_buffer->get_n_images()); + create_dataset( + dataset_name, + data_shape, + header_data_type.type, + header_data_type.endianness, + false, + metadata_buffer.get_n_images()); - H5::AtomType dataset_data_type(H5FormatUtils::get_dataset_data_type(header_data_type.type)); + H5::AtomType dataset_data_type( + H5FormatUtils::get_dataset_data_type(header_data_type.type)); dataset_data_type.setOrder(H5T_ORDER_LE); auto& dataset = datasets.at(dataset_name); - dataset.write(metadata_buffer->get_metadata_values(dataset_name).get(), dataset_data_type); + dataset.write( + metadata_buffer.get_metadata_values(dataset_name).get(), + dataset_data_type); } } -} - -std::unique_ptr get_buffered_writer(const string& filename, size_t total_frames, - std::unique_ptr metadata_buffer, hsize_t frames_per_file, hsize_t dataset_increase_step) -{ - size_t initial_dataset_size = frames_per_file != 0 ? frames_per_file : total_frames; - - if (filename == "/dev/null") { - return unique_ptr(new DummyBufferedWriter()); - } else { - 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