Files
harmonica/src/utils/workers/result.hpp
2026-03-20 13:39:50 +03:00

75 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
};
}