// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. /// Returns the index in the [list] at which [find] is or should have been. /// /// [list] has to be sorted. /// If there are several elements matching what we're looking for it can return /// the index to of an arbitrary one of them. /// If there is no match the element at the index will be smaller than the data /// searched for. /// If the input list is empty it will return 0 which is not a valid entry. int binarySearch(List list, int find) { int low = 0, high = list.length - 1; while (low < high) { int mid = high - ((high - low) >> 1); // Get middle, rounding up. int pivot = list[mid]; if (pivot <= find) { low = mid; } else { high = mid - 1; } } return low; }