/* * Copyright 2010 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrTBSearch_DEFINED #define GrTBSearch_DEFINED #include "SkTypes.h" template <typename ELEM, typename KEY> int GrTBSearch(const ELEM array[], int count, KEY target) { SkASSERT(count >= 0); if (0 == count) { // we should insert it at 0 return ~0; } int high = count - 1; int low = 0; while (high > low) { int index = (low + high) >> 1; if (LT(array[index], target)) { low = index + 1; } else { high = index; } } // check if we found it if (EQ(array[high], target)) { return high; } // now return the ~ of where we should insert it if (LT(array[high], target)) { high += 1; } return ~high; } #endif