75 lines
2.8 KiB
C++
75 lines
2.8 KiB
C++
#pragma once
|
||
|
||
#include <vector>
|
||
#include <hack/math/math.hpp>
|
||
#include <hack/logger/logger.hpp>
|
||
#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<base_t> 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<bit>{});
|
||
}
|
||
|
||
// схема такая:
|
||
// Первый вектор - кол-во типов замеров, например 7 т.е можно выстроить 7 линий на графике
|
||
// если захотелось увидеть их
|
||
// Второй вектор - данные для каждой линии, т.е. именно сими биты
|
||
std::vector<std::vector<bit>> m_data;
|
||
|
||
// максимальные и минимальные элементы в принципе в данном расчете
|
||
// в основном нужны для графической реализации
|
||
// соответственно метод ниже в попощь
|
||
base_t m_max = std::numeric_limits<base_t>::min();
|
||
base_t m_min = std::numeric_limits<base_t>::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<base_t> m_grad;
|
||
};
|
||
}
|