
marvin at rectangular
Jul 29, 2008, 2:45 PM
Post #1 of 1
(362 views)
Permalink
|
|
r3665 - in trunk: c_src/KinoSearch/Search c_src/KinoSearch/Search/HitCollector perl/t
|
|
Author: creamyg Date: 2008-07-29 14:45:43 -0700 (Tue, 29 Jul 2008) New Revision: 3665 Modified: trunk/c_src/KinoSearch/Search/HitCollector.bp trunk/c_src/KinoSearch/Search/HitCollector/SortCollector.bp trunk/c_src/KinoSearch/Search/HitCollector/TopDocCollector.bp trunk/perl/t/506-hit_collector.t Log: Make pure-Perl subclasses of HitCollector possible. Modified: trunk/c_src/KinoSearch/Search/HitCollector/SortCollector.bp =================================================================== --- trunk/c_src/KinoSearch/Search/HitCollector/SortCollector.bp 2008-07-29 21:34:46 UTC (rev 3664) +++ trunk/c_src/KinoSearch/Search/HitCollector/SortCollector.bp 2008-07-29 21:45:43 UTC (rev 3665) @@ -15,7 +15,7 @@ static SortCollector* init(SortCollector *self, FieldDocCollator *collator, u32_t size); - void + public void Collect(SortCollector *self, u32_t doc_num, float score); void Modified: trunk/c_src/KinoSearch/Search/HitCollector/TopDocCollector.bp =================================================================== --- trunk/c_src/KinoSearch/Search/HitCollector/TopDocCollector.bp 2008-07-29 21:34:46 UTC (rev 3664) +++ trunk/c_src/KinoSearch/Search/HitCollector/TopDocCollector.bp 2008-07-29 21:45:43 UTC (rev 3665) @@ -22,7 +22,7 @@ /** Keep highest scoring docs. */ - void + public void Collect(TopDocCollector *self, u32_t doc_num, float score); void Modified: trunk/c_src/KinoSearch/Search/HitCollector.bp =================================================================== --- trunk/c_src/KinoSearch/Search/HitCollector.bp 2008-07-29 21:34:46 UTC (rev 3664) +++ trunk/c_src/KinoSearch/Search/HitCollector.bp 2008-07-29 21:45:43 UTC (rev 3665) @@ -20,7 +20,7 @@ * @param doc_num A positive integer document number. * @param score A floating point score. */ - abstract void + public abstract void Collect(HitCollector *self, u32_t doc_num, float score); } @@ -47,7 +47,7 @@ /** Set bit in the object's BitVector for the supplied doc number. * Score is ignored. */ - void + public void Collect(BitCollector *self, u32_t doc_num, float score); } @@ -70,7 +70,7 @@ void Destroy(OffsetCollector *self); - void + public void Collect(OffsetCollector *self, u32_t doc_num, float score); } Modified: trunk/perl/t/506-hit_collector.t =================================================================== --- trunk/perl/t/506-hit_collector.t 2008-07-29 21:34:46 UTC (rev 3664) +++ trunk/perl/t/506-hit_collector.t 2008-07-29 21:45:43 UTC (rev 3665) @@ -1,8 +1,37 @@ use strict; use warnings; -use Test::More tests => 6; +use Test::More tests => 7; +package EvensOnlyHitCollector; +use base qw( KinoSearch::Search::HitCollector ); + +our %doc_nums; + +sub new { + my $self = shift->SUPER::new; + $doc_nums{$$self} = []; + return $self; +} + +sub collect { + my ( $self, %args ) = @_; + my $doc_num = $args{doc_num}; + if ( $doc_num % 2 == 0 ) { + push @{ $doc_nums{$$self} }, $doc_num; + } +} + +sub get_doc_nums { $doc_nums{ ${ +shift } } } + +sub DESTROY { + my $self = shift; + delete $doc_nums{$$self}; + $self->SUPER::DESTROY; +} + +package main; + use KinoSearch::Search::HitCollector; use KinoSearch::Search::HitCollector::TopDocCollector; use KinoSearch::Util::BitVector; @@ -46,3 +75,12 @@ $offset_coll->collect( doc_num => $_->[0], score => $_->[1] ) for @docs_and_scores; is_deeply( $bit_vec->to_arrayref, [ 10, 15, 20, 1010 ], "Offset collector" ); + +$hc = EvensOnlyHitCollector->new; +$hc->collect( doc_num => $_->[0], score => $_->[1] ) for @docs_and_scores; +is_deeply( + $hc->get_doc_nums, + [ 0, 10, 1000 ], + "HitCollector can be subclassed" +); + _______________________________________________ kinosearch-commits mailing list kinosearch-commits [at] rectangular http://www.rectangular.com/mailman/listinfo/kinosearch-commits
|