function FoundByBinarySearch
(
LowIdx,
HighIdx : LongInt;
var Result : LongInt;
const GoalIs : CompareFunc;
var Data;
var Goal
) : Boolean;
var
CompVal : CompareResults;
begin
FoundByBinarySearch := FALSE;
if HighIdx < LowIdx then
Exit;
Result := LowIdx + ((HighIdx-LowIdx) div 2);
CompVal := GoalIs(Result, Data, Goal);
if CompVal = BinEqual then
FoundByBinarySearch := TRUE
else if (LowIdx < HighIdx) then
begin
if CompVal = BinLess then
HighIdx := Result-1
else {CompVal = BinGreater}
LowIdx := Result+1;
FoundByBinarySearch := FoundByBinarySearch(
LowIdx, HighIdx, Result, GoalIs, Data, Goal)
end
else if (CompVal = BinLess) then
Dec(Result)
end; { function FoundByBinarySearch }