public static int BinaryBound <T1, T2>(this List <T1> list, T2 t, Comparison2 <T1, T2> comp, int begin, int end) { int count = end - begin; int idx; int step; while (count > 0) { idx = begin; step = count / 2; idx += step; if (comp(list[idx], t) < 0) { begin = ++idx; count -= step + 1; } else { count = step; } } return(begin); }
public static int BinaryBound <T1, T2>(this List <T1> list, T2 t, Comparison2 <T1, T2> comp) { return(list.BinaryBound(t, comp, 0, list.Count)); }