diff --git a/FlippR-Driver/src/output/DisplayController.h b/FlippR-Driver/src/output/DisplayController.h index 2dbc939..fa675fd 100644 --- a/FlippR-Driver/src/output/DisplayController.h +++ b/FlippR-Driver/src/output/DisplayController.h @@ -7,6 +7,7 @@ #ifndef _SRC_OUTPUT_IDISPLAYCONTROLLER_H_ #define _SRC_OUTPUT_IDISPLAYCONTROLLER_H_ + namespace flippR_driver { namespace output diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index 66f9331..2414d31 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -18,7 +18,6 @@ #include "output/items/detail/EightDigitDisplay.h" #include "output/items/detail/SevenDigitDisplay.h" - namespace flippR_driver { namespace output @@ -53,12 +52,11 @@ std::shared_ptr get_OutputDriver(std::istream &output_pin_config, std::unique_ptr display_board_pin_controller(new detail::DisplayBoardPinController(parse_pins_display_board(display_board_config))); auto displays = create_displays(display_config); - // todo - std::vector> displays_vec; - boost::copy(displays | boost::adaptors::map_values, std::back_inserter(displays_vec)); - std::unique_ptr display_controller(new detail::DisplayController(displays_vec, std::move(display_board_pin_controller))); + std::unique_ptr display_controller(new detail::DisplayController(displays, std::move(display_board_pin_controller))); - return std::make_shared(std::move(display_controller), solenoids, lamps, sounds, displays); + auto display_map = map_displays(displays); + + return std::make_shared(std::move(display_controller), solenoids, lamps, sounds, display_map); } std::map parse_pins_driver_board(json &driver_board_config) @@ -256,9 +254,9 @@ std::shared_ptr create_sound(nlohmann::json &sound_json, s } } -std::map> create_displays(std::istream &display_config) +std::vector> create_displays(std::istream &display_config) { - std::map> displays; + std::vector> displays; json display_config_json; display_config >> display_config_json; @@ -267,6 +265,7 @@ std::map> create_displays(std::is for(json &display_json : displays_json) { auto display = create_display(display_json); + displays.push_back(display); } return displays; @@ -300,6 +299,18 @@ std::shared_ptr create_display(nlohmann::json &display_jso } } +std::map> map_displays(const std::vector> &displays) +{ + std::map> display_map; + + for(auto &display : displays) + { + display_map.emplace(display->get_address(), display); + } + + return display_map; +} + } } } diff --git a/FlippR-Driver/src/output/OutputDriverFactory.h b/FlippR-Driver/src/output/OutputDriverFactory.h index d2d2ec1..fe7a116 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.h +++ b/FlippR-Driver/src/output/OutputDriverFactory.h @@ -36,7 +36,8 @@ namespace OutputDriverFactory std::chrono::milliseconds get_deactivation_time(nlohmann::json &json); - std::map> create_displays(std::istream &display_config); + std::vector> create_displays(std::istream &display_config); + std::map> map_displays(const std::vector> &displays); std::shared_ptr create_display(nlohmann::json &display_json); std::map parse_pins_driver_board(nlohmann::json &driver_board_config); diff --git a/FlippR-Driver/src/output/detail/OutputDriver.cpp b/FlippR-Driver/src/output/detail/OutputDriver.cpp index 9ea20fa..880a38a 100644 --- a/FlippR-Driver/src/output/detail/OutputDriver.cpp +++ b/FlippR-Driver/src/output/detail/OutputDriver.cpp @@ -19,7 +19,7 @@ namespace detail using namespace items; -OutputDriver::OutputDriver(std::unique_ptr display_controller, std::map> solenoids, std::map> lamps, std::map> sounds, std::map> displays) +OutputDriver::OutputDriver(std::unique_ptr display_controller, std::map> solenoids, std::map> lamps, std::map> sounds, std::map> displays) : display_controller(std::move(display_controller)), solenoids(std::move(solenoids)), lamps(std::move(lamps)), sounds(std::move(sounds)), displays(std::move(displays)) {} diff --git a/FlippR-Driver/src/output/detail/OutputDriver.h b/FlippR-Driver/src/output/detail/OutputDriver.h index 4b985cc..ab83dc0 100644 --- a/FlippR-Driver/src/output/detail/OutputDriver.h +++ b/FlippR-Driver/src/output/detail/OutputDriver.h @@ -23,7 +23,7 @@ namespace detail class OutputDriver : public output::OutputDriver { public: - OutputDriver(std::unique_ptr display_controller, std::map> solenoids, std::map> lamps, std::map> sounds, std::map> displays); + OutputDriver(std::unique_ptr display_controller, std::map> solenoids, std::map> lamps, std::map> sounds, std::map> displays); ~OutputDriver() override = default; diff --git a/FlippR-Driver/src/output/items/OutputDisplay.h b/FlippR-Driver/src/output/items/OutputDisplay.h index cbac8a1..9abdf1f 100644 --- a/FlippR-Driver/src/output/items/OutputDisplay.h +++ b/FlippR-Driver/src/output/items/OutputDisplay.h @@ -19,7 +19,7 @@ namespace output namespace items { -class OutputDisplay : Display +class OutputDisplay : public Display { public: