{
double integral = 0;
double time = 0;
- int i = 0;
- nb_points_ = profile->event_list.size() + 1;
- time_points_ = new double[nb_points_];
- integral_ = new double[nb_points_];
+ unsigned nb_points = profile->event_list.size() + 1;
+ time_points_.reserve(nb_points);
+ integral_.reserve(nb_points);
for (auto const& val : profile->event_list) {
- time_points_[i] = time;
- integral_[i] = integral;
- integral += val.date_ * val.value_;
+ time_points_.push_back(time);
+ integral_.push_back(integral);
time += val.date_;
- i++;
+ integral += val.date_ * val.value_;
}
- time_points_[i] = time;
- integral_[i] = integral;
-}
-
-CpuTiProfile::~CpuTiProfile()
-{
- delete[] time_points_;
- delete [] integral_;
+ time_points_.push_back(time);
+ integral_.push_back(integral);
}
CpuTiTmgr::~CpuTiTmgr()
{
double integral = 0;
double a_aux = a;
- int ind = binary_search(time_points_, a, nb_points_);
+ int ind = binary_search(time_points_, a);
integral += integral_[ind];
XBT_DEBUG("a %f ind %d integral %f ind + 1 %f ind %f time +1 %f time %f", a, ind, integral, integral_[ind + 1],
double CpuTiProfile::solve_simple(double a, double amount)
{
double integral_a = integrate_simple_point(a);
- int ind = binary_search(integral_, integral_a + amount, nb_points_);
+ int ind = binary_search(integral_, integral_a + amount);
double time = time_points_[ind];
time += (integral_a + amount - integral_[ind]) /
((integral_[ind + 1] - integral_[ind]) / (time_points_[ind + 1] - time_points_[ind]));
double CpuTiTmgr::get_power_scale(double a)
{
double reduced_a = a - floor(a / last_time_) * last_time_;
- int point = profile_->binary_search(profile_->time_points_, reduced_a, profile_->nb_points_);
+ int point = profile_->binary_search(profile_->time_points_, reduced_a);
kernel::profile::DatedValue val = speed_profile_->event_list.at(point);
return val.value_;
}
* It returns the last point of the interval in which "a" is.
* @param array Array
* @param a Value to search
- * @param size Size of the array
* @return Index of point
*/
-int CpuTiProfile::binary_search(double* array, double a, int size)
+int CpuTiProfile::binary_search(const std::vector<double>& array, double a)
{
- xbt_assert(size > 0, "Wrong parameters: empty array");
if (array[0] > a)
return 0;
- auto pos = std::upper_bound(array, array + size, a);
- return std::distance(array, pos) - 1;
+ auto pos = std::upper_bound(begin(array), end(array), a);
+ return std::distance(begin(array), pos) - 1;
}
/*********
class CpuTiProfile {
public:
explicit CpuTiProfile(profile::Profile* profile);
- CpuTiProfile(const CpuTiProfile&) = delete;
- CpuTiProfile& operator=(const CpuTiProfile&) = delete;
- ~CpuTiProfile();
double integrate_simple(double a, double b);
double integrate_simple_point(double a);
double solve_simple(double a, double amount);
- double* time_points_;
- double *integral_;
- int nb_points_;
- static int binary_search(double* array, double a, int size);
+ std::vector<double> time_points_;
+ std::vector<double> integral_;
+ static int binary_search(const std::vector<double>& array, double a);
};
class CpuTiTmgr {