# Copyright (c) 2003 Cunningham & Cunningham, Inc.
# Read license.txt in this directory.
#
# Perl translation by Martin Busik <martin.busik@busik.de>
#
package Test::C2FIT::eg::BinaryChop;
use base 'Test::C2FIT::ColumnFixture';
use strict;
sub new {
my $pkg = shift;
return $pkg->SUPER::new(
fieldColumnTypeMap => { 'array' => 'Test::C2FIT::GenericArrayAdapter' }
);
}
sub execute {
my $self = shift;
$self->{array} = [] unless ref( $self->{array} );
}
sub _ka(@) {
my $self = shift;
return ( $self->{key}, $self->{array} );
}
sub result {
chopFriday( _ka(@_) );
}
sub mon { chopMonday( _ka(@_) ) }
sub tue { result(@_) }
sub wed { result(@_) }
sub thr { result(@_) }
sub fri { result(@_) }
sub chopMonday($$) {
my ( $key, $array ) = @_;
my $min = 0;
my $max = @$array - 1;
while ( $min <= $max ) {
my $probe = int( ( $min + $max ) / 2 );
return $probe if $key == $array->[$probe];
if ( $key > $array->[$probe] ) {
$min = $probe + 1;
}
else {
$max = $probe - 1;
}
}
return -1;
}
sub chopFriday($$) {
my ( $key, $array ) = @_;
for ( my $i = 0 ; $i < scalar(@$array) ; $i++ ) {
return $i if $array->[$i] == $key;
}
return -1;
}
1;