Mailing List Archive

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@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits