diff --git a/generating_data/headers/generating_data.hpp b/generating_data/headers/generating_data.hpp index e591ce6..696fd16 100644 --- a/generating_data/headers/generating_data.hpp +++ b/generating_data/headers/generating_data.hpp @@ -1,16 +1,57 @@ -#ifndef _DATA_RENDER_ -#define _DATA_RENDER_ +#ifndef _GENERATING_DATA_ +#define _GENERATING_DATA_ -#include -#include +#include + +#include "gen_rand_data.hpp" +#include "structer.hpp" + +namespace gen_matr_type { +template +using num_lim = std::numeric_limits; -namespace data_render { template -void get_random(T& source, int size, int mmax = 256) { - srand(time(0)); +void fill(Mtrx& matrix, const double& sparsity = 1.0, + const T& min = num_lim::min(), const T& max = num_lim::max()) { + if (matrix.empty()) return; + + gen_rand_data::Generator gen(min, max); + + std::mt19937_64 genSparsity{std::random_device{}()}; + std::uniform_real_distribution distSparsity(0.0, 1.0); + + for (size_t i = 0; i < matrix.height; ++i) + for (size_t j = 0; j < matrix.width; ++j) { + if (sparsity >= distSparsity(genSparsity)) do { + matrix(i, j) = gen(); + } while (matrix(i, j) == static_cast(0)); + + else + matrix(i, j) = static_cast(0); + } +} + +template +void fill(Image& image, const double& sparsity = 1.0, + const uint8_t& min = num_lim::min(), + const uint8_t& max = num_lim::max()) { + if (image.empty()) return; + + gen_rand_data::Generator gen(num_lim::min(), + num_lim::max()); + + std::mt19937_64 genSparsity{std::random_device{}()}; + std::uniform_real_distribution distSparsity(0.0, 1.0); + + for (size_t i = 0; i < image.height; ++i) + for (size_t j = 0; j < image.width; ++j) { + if (sparsity >= distSparsity(genSparsity)) + image(i, j) = Color(gen(), gen(), gen(), gen()); - for (int i = 0; i < size; ++i) source[i] = (unsigned char)(rand() % mmax); + else + image(i, j) = Color(0, 0, 0, 0); + } } -} // namespace data_render +} // namespace gen_matr_type -#endif // _DATA_RENDER_ \ No newline at end of file +#endif // _GENERATING_DATA_ diff --git a/generating_data/headers/structer.hpp b/generating_data/headers/structer.hpp index 975cef4..e93ac1c 100644 --- a/generating_data/headers/structer.hpp +++ b/generating_data/headers/structer.hpp @@ -21,6 +21,7 @@ class Mtrx { Mtrx(const Mtrx& mtrx_m); // copy constructor Mtrx(Mtrx&& mtrx_m); ValType* DData() { return data; } + bool empty() const noexcept { return data == nullptr; } ~Mtrx() { delete[] data; } // destructor