#pragma once #include #include #include #include "utils/real_time/real_time.hpp" #include "utils/using.hpp" namespace hr { struct result { struct bit { std::string m_name; real_time m_duration; // когда в расчете только одно значение. да может быть и нужно это использовать как // массив с индексом 0 типа m_values[0], но как-то вот так. // Потому как отрисовка графиков тот еще праздник... // конечно в боевой задаче это можно и нужно оптимизировать, но в данном случае для вывода на экран и понимания процесса // это можно опустить и использовать так как есть... base_t m_value; // когда у тебя получается на один бин большоймассив данных, типа расчет fft (см. комент выше) std::vector m_values; }; void set_bit(std::size_t index, bit& b) { try { m_data.at(index).push_back(b); } catch(std::exception& e) { hack::error()("Хрень какая-то с массивом данных"); hack::warn()(e.what()); } } bool empty() const { return m_data.empty(); } // инициализирует кол-во данных для расчета в плагине // см. ниже void init(std::size_t count_data) { for (std::size_t i = 0; i < count_data; ++i) m_data.push_back(std::vector{}); } // схема такая: // Первый вектор - кол-во типов замеров, например 7 т.е можно выстроить 7 линий на графике // если захотелось увидеть их // Второй вектор - данные для каждой линии, т.е. именно сими биты std::vector> m_data; // максимальные и минимальные элементы в принципе в данном расчете // в основном нужны для графической реализации // соответственно метод ниже в попощь base_t m_max = std::numeric_limits::min(); base_t m_min = std::numeric_limits::max(); void set_min_max(base_t v) { m_max = hack::math::max(m_max, v); m_min = hack::math::min(m_min, v); } // иногда нужна градуировка одна и тажа для всех бинов std::vector m_grad; }; }