- * \brief Binary search in array.
- * It returns the first point of the interval in which "a" is.
- * \param array Array
- * \param a Value to search
- * \param low Low bound to search in array
- * \param high Upper bound to search in array
- * \return Index of point
-*/
-int CpuTiTrace::binarySearch(double *array, double a, int low, int high)
-{
- xbt_assert(low < high, "Wrong parameters: low (%d) should be smaller than high (%d)", low, high);
-
- do {
- int mid = low + (high - low) / 2;
- XBT_DEBUG("a %f low %d high %d mid %d value %f", a, low, high, mid, array[mid]);
-
- if (array[mid] > a)
- high = mid;
- else
- low = mid;
- }
- while (low < high - 1);
-
- return low;
-}
-
-}
+ * @brief Binary search in array.
+ * It returns the last point of the interval in which "a" is.
+ * @param array Array
+ * @param a Value to search
+ * @return Index of point
+ */
+int CpuTiProfile::binary_search(const std::vector<double>& array, double a)
+{
+ if (array[0] > a)
+ return 0;
+ auto pos = std::upper_bound(begin(array), end(array), a);
+ return std::distance(begin(array), pos) - 1;