( 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 }