From 0aa81fdec065bd77d8c61b3a75b36cb2260f025f Mon Sep 17 00:00:00 2001 From: Phuntsok Drak-pa Date: Thu, 25 Apr 2019 02:53:30 +0200 Subject: [PATCH] fixed some functions' arguments, inlined some other simple functions --- include/genimg/methods.hh | 56 ++++++++++++++++++++++++++++++--------- src/methods.cc | 52 +++++------------------------------- 2 files changed, 49 insertions(+), 59 deletions(-) diff --git a/include/genimg/methods.hh b/include/genimg/methods.hh index d2d86e5..3a9ad5f 100644 --- a/include/genimg/methods.hh +++ b/include/genimg/methods.hh @@ -30,13 +30,35 @@ class ImageManipulator { int const t_width, int const t_height); - /// \brief Copy assignment operator - [[nodiscard]] auto operator=(const ImageManipulator& other) - -> ImageManipulator; + /** + * \brief Copy assignment operator + * + * Copy assignment operator, will copy all of the input’s members except for + * its mutex, a new one will be generated. + * + * \param[in] other Element to copy + * \return ImageManipulator + */ + [[nodiscard]] inline auto operator=(const ImageManipulator& other) + -> ImageManipulator + { + return ImageManipulator(other); + } - /// \brief Move assignment operator - [[nodiscard]] auto operator=(ImageManipulator&& other) noexcept - -> ImageManipulator; + /** + * \brief Move assignment operator + * + * Move assignment operator, will move all of the input’s members except for + * its mutex, a new one will be generated. + * + * \param[in] other Element to move + * \return ImageManipulator + */ + [[nodiscard]] inline auto operator=(ImageManipulator&& other) noexcept + -> ImageManipulator + { + return ImageManipulator{std::move(other)}; + } /// \brief Execute the nth method on the current object void exec_method(int const t_nb_method, @@ -45,11 +67,19 @@ class ImageManipulator { int const t_rows, int const t_submethod); - /// \brief Write the generated image to the output path - void write_file() const; + /** + * \brief Write the generated image to the output path + * + * Write the generated image as a file to the specified path stored in the + * object + */ + inline void write_file() const + { + cv::imwrite(output_path_, generated_image_); + } /// \brief Returns a reference to the generated image - [[nodiscard]] auto const& get_generated_image() const noexcept + [[nodiscard]] inline auto const& get_generated_image() const noexcept { return generated_image_; } @@ -72,12 +102,12 @@ class ImageManipulator { [[nodiscard]] auto get_controlled_square_values() const noexcept; /// \brief Generates a candidate for image generation improvement [[nodiscard]] auto create_candidate(bool const t_controlled_size) const; - /// \brief Generates organized views of the reference image for method 5 + /// \brief Generates organized views of the reference image for method 5 [[nodiscard]] auto generate_tiles(int const t_cols, int const t_rows) const; /// \brief Gets all colors from the reference image void get_color_set(); /// \brief Threaded helper for \ref get_color_set - void threaded_get_color(int t_h); + void threaded_get_color(int const t_h); /// \brief Draw a square on an image void draw_square(cv::Mat& t_img, cv::Point const& t_top_left, @@ -85,8 +115,8 @@ class ImageManipulator { cv::Scalar const& t_color) const; /// \brief Update this object’s generated image void update_gen_image(cv::Mat const& t_img, double const t_diff); - /// \brief Merges tiles generated by method5 - void merge_tiles(std::vector> t_tiles); + /// \brief Merges tiles generated by method5 + void merge_tiles(std::vector> const& t_tiles); /// \brief First method as described in the /// [report](https://labs.phundrak.fr/phundrak/genetic-images/blob/master/report/report.pdf) void method1(); diff --git a/src/methods.cc b/src/methods.cc index 5026d56..4cc9f1a 100644 --- a/src/methods.cc +++ b/src/methods.cc @@ -103,35 +103,6 @@ ImageManipulator::ImageManipulator(cv::Mat const& t_origin_image, } } - -// operators ////////////////////////////////////////////////////////////////// - -/** - * Copy assignment operator, will copy all of the input’s members except for - * its mutex, a new one will be generated. - * - * \param[in] other Element to copy - * \return ImageManipulator - */ -[[nodiscard]] auto ImageManipulator::operator=(const ImageManipulator& other) - -> ImageManipulator -{ - return ImageManipulator(other); -} - -/** - * Move assignment operator, will move all of the input’s members except for - * its mutex, a new one will be generated. - * - * \param[in] other Element to move - * \return ImageManipulator - */ -[[nodiscard]] auto ImageManipulator::operator=( - ImageManipulator&& other) noexcept -> ImageManipulator -{ - return ImageManipulator{std::move(other)}; -} - // public methods ///////////////////////////////////////////////////////////// /** @@ -180,15 +151,6 @@ void ImageManipulator::exec_method(int const t_nb_method, } } -/** - * Write the generated image as a file to the specified path stored in the - * object - */ -void ImageManipulator::write_file() const -{ - cv::imwrite(output_path_, generated_image_); -} - /////////////////////////////////////////////////////////////////////////////// // Private // /////////////////////////////////////////////////////////////////////////////// @@ -345,7 +307,7 @@ void ImageManipulator::get_color_set() * colors_, then resumes the other threads. Helper function for \ref * get_color_set */ -void ImageManipulator::threaded_get_color(int t_h) +void ImageManipulator::threaded_get_color(int const t_h) { if (t_h > reference_.size().height) { return; @@ -412,26 +374,24 @@ void ImageManipulator::update_gen_image(cv::Mat const& t_img, * \param t_tiles Collection of tiles to be merged together */ void ImageManipulator::merge_tiles( - std::vector> t_tiles) + std::vector> const& t_tiles) { std::vector columns{}; - for (auto const& col : t_tiles) { + std::for_each(t_tiles.begin(), t_tiles.end(), [&columns](auto const& col) { std::vector column_arr{}; cv::Mat column_img{}; - for (auto const& tile : col) { + std::for_each(col.begin(), col.end(), [&column_arr](auto const& tile) { column_arr.push_back(tile.get_generated_image()); - } + }); vconcat(column_arr, column_img); columns.push_back(std::move(column_img)); - } + }); hconcat(columns, generated_image_); } void ImageManipulator::method1() { spdlog::debug("Beginning method1, initial difference: {}", diff_); - spdlog::debug("nb_total_iter: {}, nb_remaining_iter: {}", total_iterations_, - remaining_iter_); while (remaining_iter_ > 0 && diff_ > 0.0) { auto temp_image = generated_image_.clone(); auto const [rand_x, rand_y, size] = get_square_values();