| /* |
| * 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 |