test_sdk/math/gtl_math_max.cpp

53 lines
1.4 KiB
C++

#include "gtl_math_max.h"
namespace gtl
{
namespace math
{
max::max(gtl::analog_data *data)
: analog_value(data)
{
_name = "max";
}
void max::before_copying_data(std::vector<qreal>::iterator begin, std::vector<qreal>::iterator end)
{
std::set<std::vector<qreal>::iterator>::iterator iter_remove_begin = _maxs.lower_bound(begin);
std::set<std::vector<qreal>::iterator>::iterator iter_remove_end = _maxs.lower_bound(end);
_maxs.erase(iter_remove_begin, iter_remove_end);
}
void max::after_copying_data(std::vector<qreal>::iterator begin, std::vector<qreal>::iterator end)
{
_maxs.insert(std::max_element(begin, end));
}
void max::set_time(qreal value)
{
analog_value::set_time(value);
_maxs.clear();
}
void max::data_changed()
{
analog_value::data_changed();
if(_maxs.size())
{
qreal max = **_maxs.begin();
for(std::set<std::vector<qreal>::iterator>::iterator it = _maxs.begin(); it != _maxs.end(); ++it)
{
if(**it > max)
max = **it;
}
_value = max;
emit value_changed();
}
}
}
}