blob: b823255e28eb44dbd51a045e91540c6fa2235d7c [file] [log] [blame]
#include "event-scheduler.h"
Task::Task(const Callback &callback, void *arg, const Tag &tag)
: m_callback(callback)
, m_arg(arg)
, m_tag(tag)
{
}
Task::Task(const Task &other)
: m_callback(other.m_callback)
, m_arg(other.m_arg)
, m_tag(other.m_tag)
{
}
Task &
Task::operator=(const Task &other)
{
m_callback = other.m_callback;
m_arg = other.m_arg;
m_tag = other.m_tag;
return (*this);
}
RandomIntervalGenerator::RandomIntervalGenerator(double interval, double percent, Direction direction = UP)
: m_interval(interval)
, m_rng(time(NULL))
, m_percent(percent)
, m_dist(0.0, fractional(percent))
, m_random(m_rng, m_dist)
{
}
double
RandomIntervalGenerator::nextInterval()
{
double percent = m_random();
double interval = m_interval;
switch (m_direction)
{
case UP: interval = m_interval * (1.0 + percent); break;
case DOWN: interval = m_interval * (1.0 - percent); break;
case EVEN: interval = m_interval * (1.0 - m_percent/2.0 + percent); break;
default: break
}
return interval;
}