From 3f12acf9d0ae4dbf890fe163c971a9e0f1a305f5 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 24 Jan 2018 15:04:43 +0100 Subject: [PATCH] Move parameters type storage to Manager --- src/WriterManager.cpp | 10 +++++++--- src/WriterManager.hpp | 6 +++++- src/h5_zmq_writer.cpp | 4 ++-- src/rest_interface.cpp | 7 ++++--- src/rest_interface.hpp | 4 +--- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/WriterManager.cpp b/src/WriterManager.cpp index 0eb56fe..ef6c5ba 100644 --- a/src/WriterManager.cpp +++ b/src/WriterManager.cpp @@ -4,8 +4,8 @@ using namespace std; -WriterManager::WriterManager(uint64_t n_images): - n_images(n_images), running_flag(true), n_received_frames(0), n_written_frames(0) +WriterManager::WriterManager(map* parameters_type, uint64_t n_images): + parameters_type(parameters_type), n_images(n_images), running_flag(true), n_received_frames(0), n_written_frames(0) { #ifdef DEBUG_OUTPUT cout << "[WriterManager::WriterManager] Writer manager for n_images " << n_images << endl; @@ -41,7 +41,7 @@ map WriterManager::get_statistics() return result; } -std::map& WriterManager::get_parameters(){ +map& WriterManager::get_parameters(){ return parameters; } @@ -55,6 +55,10 @@ void WriterManager::set_parameters(map& new_parameters) } } +map* WriterManager::get_parameters_type() { + return parameters_type; +} + bool WriterManager::is_running() { // Take into account n_images only if it is <> 0. diff --git a/src/WriterManager.hpp b/src/WriterManager.hpp index f9fe796..710d445 100644 --- a/src/WriterManager.hpp +++ b/src/WriterManager.hpp @@ -6,22 +6,26 @@ #include #include +#include "H5Format.hpp" + class WriterManager { std::map parameters = {}; // Initialize in constructor. + std::map* parameters_type; size_t n_images; std::atomic_bool running_flag; std::atomic n_received_frames; std::atomic n_written_frames; public: - WriterManager(uint64_t n_images=0); + WriterManager(std::map* parameters_type, uint64_t n_images=0); void stop(); bool is_running(); std::string get_status(); + std::map* get_parameters_type(); std::map& get_parameters(); void set_parameters(std::map& new_parameters); diff --git a/src/h5_zmq_writer.cpp b/src/h5_zmq_writer.cpp index 327fc73..22c6555 100644 --- a/src/h5_zmq_writer.cpp +++ b/src/h5_zmq_writer.cpp @@ -141,7 +141,7 @@ void run_writer(string connect_address, string output_file, uint64_t n_images, u int n_io_threads = config::zmq_n_io_threads; int receive_timeout = config::zmq_receive_timeout; - WriterManager manager(n_images); + WriterManager manager(get_input_value_type(), n_images); RingBuffer ring_buffer(n_slots); // TODO: Remove this. This is needed only for testing. @@ -228,7 +228,7 @@ void run_writer(string connect_address, string output_file, uint64_t n_images, u boost::thread receiver_thread(receive_zmq, &manager, &ring_buffer, connect_address, n_io_threads, receive_timeout); boost::thread writer_thread(write_h5, &manager, &ring_buffer, output_file); - start_rest_api(manager, rest_port, get_input_value_type()); + start_rest_api(manager, rest_port); #ifdef DEBUG_OUTPUT cout << "[h5_zmq_writer::run_writer] Rest API stopped." << endl; diff --git a/src/rest_interface.cpp b/src/rest_interface.cpp index e234778..39bb195 100644 --- a/src/rest_interface.cpp +++ b/src/rest_interface.cpp @@ -6,7 +6,7 @@ using namespace std; -void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map* input_value_type) +void start_rest_api(WriterManager& writer_manager, uint16_t port) { #ifdef DEBUG_OUTPUT @@ -59,6 +59,7 @@ void start_rest_api(WriterManager& writer_manager, uint16_t port, std::mapat(parameter_name); + auto parameter_type = parameters_type->at(parameter_name); if (parameter_type == NX_FLOAT) { result[parameter_name] = boost::any_cast(parameter_value); @@ -104,7 +105,7 @@ void start_rest_api(WriterManager& writer_manager, uint16_t port, std::mapat(parameter_name); + auto parameter_type = parameters_type->at(parameter_name); if (parameter_type == NX_FLOAT) { new_parameters[parameter_name] = item.d(); diff --git a/src/rest_interface.hpp b/src/rest_interface.hpp index b737e59..4064833 100644 --- a/src/rest_interface.hpp +++ b/src/rest_interface.hpp @@ -2,8 +2,6 @@ #define REST_INTERFACE_H #include "WriterManager.hpp" -#include "H5Format.hpp" - -void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map* input_value_type); +void start_rest_api(WriterManager& writer_manager, uint16_t port); #endif \ No newline at end of file