void WifiLinkImpl::set_host_rate(const s4u::Host* host, int rate_level)
{
- auto insert_done = host_rates_.insert(std::make_pair(host->get_name(), rate_level));
- if (not insert_done.second)
- insert_done.first->second = rate_level;
+ host_rates_[host->get_name()] = rate_level;
// Each time we add a host, we refresh the decay model
refresh_decay_bandwidths();
return s4u::Link::SharingPolicy::WIFI;
}
-int WifiLinkImpl::get_host_count() const
+size_t WifiLinkImpl::get_host_count() const
{
- return static_cast<int>(host_rates_.size());
+ return host_rates_.size();
}
void WifiLinkImpl::refresh_decay_bandwidths()
{
// Compute number of STAtion on the Access Point
- int nSTA = get_host_count();
+ const auto nSTA_minus_1 = static_cast<double>(get_host_count() - 1);
std::vector<Metric> new_bandwidths;
for (auto const& bandwidth : bandwidths_) {
double min_bw = bandwidth.peak - (wifi_max_rate_ - wifi_min_rate_);
double model_rate = bandwidth.peak - (wifi_max_rate_ - model_rate_);
- xbt_assert(min_bw > 0, "Your WIFI link is using bandwidth(s) which is too low for the decay model.");
-
double N0 = max_bw - min_bw;
double lambda = (-log(model_rate - min_bw) + log(N0)) / model_n_;
// Since decay model start at 0 we should use (nSTA-1)
- double new_peak = N0 * exp(-lambda * (nSTA - 1)) + min_bw;
+ double new_peak = N0 * exp(-lambda * nSTA_minus_1) + min_bw;
new_bandwidths.push_back({new_peak, 1.0, nullptr});
}
decay_bandwidths_ = new_bandwidths;