#include <xbt/Extendable.hpp>
namespace simgrid::smpi {
-static auto factor_lambda(s_smpi_factor_t const& fact, double size)
+static auto factor_lambda(std::vector<double> const& values, double size)
{
- return fact.values[0] + fact.values[1] * static_cast<size_t>(size);
+ return values[0] + values[1] * static_cast<size_t>(size);
}
class Host {
utils::FactorSet orecv_{"smpi/or", 0.0, factor_lambda};
const std::string& name_;
std::vector<s_smpi_factor_t> factors_;
double default_value_;
- const std::function<double(s_smpi_factor_t const&, double)> lambda_;
+ const std::function<double(std::vector<double> const&, double)> lambda_;
bool initialized_ = false;
public:
// Parse the factor from a string
FactorSet(
const std::string& name, double default_value = 1,
- std::function<double(s_smpi_factor_t const&, double)> const& lambda = [](s_smpi_factor_t const& factor, double) {
- return factor.values.front();
- });
+ std::function<double(std::vector<double> const&, double)> const& lambda = [](std::vector<double> const& values,
+ double) { return values.front(); });
void parse(const std::string& values);
bool is_initialized() const { return initialized_; }
- // Get the default factor, the one that is not a function of the size
+ // Get the default value
double operator()();
// Get the factor to use for the provided size
double operator()(double size);
}
FactorSet::FactorSet(const std::string& name, double default_value,
- std::function<double(s_smpi_factor_t const&, double)> const& lambda)
+ std::function<double(std::vector<double> const&, double)> const& lambda)
: name_(name), default_value_(default_value), lambda_(lambda)
{
}
double FactorSet::operator()()
{
- return lambda_(factors_.front(), 0);
+ return default_value_;
}
double FactorSet::operator()(double size)
XBT_DEBUG("%s: %f <= %zu return default %f", name_.c_str(), size, fact.factor, default_value_);
return default_value_;
}
- double val = lambda_(factors_[i - 1], size);
+ double val = lambda_(factors_[i - 1].values, size);
XBT_DEBUG("%s: %f <= %zu return %f", name_.c_str(), size, fact.factor, val);
return val;
}
}
- double val = lambda_(factors_.back(), size);
+ double val = lambda_(factors_.back().values, size);
XBT_DEBUG("%s: %f > %zu return %f", name_.c_str(), size, factors_.back().factor, val);
return val;