29 lines
854 B
Plaintext
29 lines
854 B
Plaintext
include "NSLog.incl"
|
|
|
|
NSInteger local fn BinarySearch( array as CFArrayRef, key as CFTypeRef )
|
|
NSInteger lo = 0
|
|
include "NSLog.incl"
|
|
|
|
NSInteger local fn BinarySearch( array as CFArrayRef, key as CFTypeRef, range as CFRange )
|
|
if ( range.length == 0 ) then return NSNotFound
|
|
|
|
NSInteger i = range.location + range.length / 2
|
|
CFTypeRef midVal = array[i]
|
|
|
|
select ( fn NumberCompare( midVal, key ) )
|
|
case NSOrderedAscending
|
|
return fn BinarySearch( array, key, fn CFRangeMake( i + 1, range.length - i + 1 ) )
|
|
case NSOrderedDescending
|
|
return fn BinarySearch( array, key, fn CFRangeMake( range.location, i - range.location ) )
|
|
end select
|
|
end fn = i
|
|
|
|
void local fn DoIt
|
|
CFArrayRef a = @[@1, @3, @4, @5, @6, @7, @8, @9, @10]
|
|
NSLog(@"6 is at position %d", fn BinarySearch( a, @6, fn CFRangeMake(0,len(a)) )) // prints 4
|
|
end fn
|
|
|
|
fn DoIt
|
|
|
|
HandleEvents
|