- 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;
+ 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;