+ if (latencyDistr.isPoisson) {
+ addFunctionGenericDistribution(
+ cb,
+ IntervalDistributionFunc(
+ PoissonDistributionFunctor(latencyDistr.poissonMean)),
+ nameID.str(),
+ to<std::string>(latencyDistr.poissonMean, "ms (Poisson mean)"),
+ startDelay);
+ } else {
+ addFunction(cb, interval, nameID, startDelay);
+ }
+}
+
+void FunctionScheduler::addFunctionUniformDistribution(
+ const std::function<void()>& cb,
+ milliseconds minInterval,
+ milliseconds maxInterval,
+ StringPiece nameID,
+ milliseconds startDelay) {
+ addFunctionGenericDistribution(
+ cb,
+ IntervalDistributionFunc(
+ UniformDistributionFunctor(minInterval, maxInterval)),
+ nameID.str(),
+ to<std::string>(
+ "[", minInterval.count(), " , ", maxInterval.count(), "] ms"),
+ startDelay);
+}
+
+void FunctionScheduler::addFunctionGenericDistribution(
+ const std::function<void()>& cb,
+ const IntervalDistributionFunc& intervalFunc,
+ const std::string& nameID,
+ const std::string& intervalDescr,
+ milliseconds startDelay) {
+ if (!cb) {
+ throw std::invalid_argument(
+ "FunctionScheduler: Scheduled function must be set");
+ }
+ if (!intervalFunc) {
+ throw std::invalid_argument(
+ "FunctionScheduler: interval distribution function must be set");