Mailing List Archive

r3798 - trunk/c_src/KinoSearch/Search
Author: creamyg
Date: 2008-08-29 19:00:52 -0700 (Fri, 29 Aug 2008)
New Revision: 3798

Added:
trunk/c_src/KinoSearch/Search/PolyScorer.bp
trunk/c_src/KinoSearch/Search/PolyScorer.c
Modified:
trunk/c_src/KinoSearch/Search/ANDScorer.bp
trunk/c_src/KinoSearch/Search/ANDScorer.c
Log:
Introduce PolyScorer, to be a common base class for all Scorers compiled from
PolyQueries. Integrate it into ANDScorer to start.


Modified: trunk/c_src/KinoSearch/Search/ANDScorer.bp
===================================================================
--- trunk/c_src/KinoSearch/Search/ANDScorer.bp 2008-08-30 01:33:46 UTC (rev 3797)
+++ trunk/c_src/KinoSearch/Search/ANDScorer.bp 2008-08-30 02:00:52 UTC (rev 3798)
@@ -3,17 +3,13 @@
/** Intersect multiple required Scorers.
*/

-class KinoSearch::Search::ANDScorer extends KinoSearch::Search::Scorer {
+class KinoSearch::Search::ANDScorer extends KinoSearch::Search::PolyScorer {

- float coord;
Tally *tally;
Scorer **subscorers;
size_t cap;
- VArray *children;
- u32_t num_kids;
bool_t more;
bool_t first_time;
- ByteBuf *raw_prox_bb;

static incremented ANDScorer*
new(VArray *children, Similarity *sim);

Modified: trunk/c_src/KinoSearch/Search/ANDScorer.c
===================================================================
--- trunk/c_src/KinoSearch/Search/ANDScorer.c 2008-08-30 01:33:46 UTC (rev 3797)
+++ trunk/c_src/KinoSearch/Search/ANDScorer.c 2008-08-30 02:00:52 UTC (rev 3798)
@@ -18,15 +18,12 @@
u32_t i;

/* Init. */
- Scorer_init((Scorer*)self, sim);
+ PolyScorer_init((PolyScorer*)self, children, sim);
self->tally = Tally_new();
self->cap = 10;
- self->raw_prox_bb = BB_new(0);
self->first_time = true;

/* Assign. */
- self->children = REFCOUNT_INC(children);
- self->num_kids = children->size;
self->more = self->num_kids ? true : false;
self->subscorers = MALLOCATE(self->num_kids, Scorer*);
for (i = 0; i < children->size; i++) {
@@ -37,7 +34,6 @@

/* Derive. */
self->tally->num_matchers = self->num_kids;
- self->coord = Sim_Coord(self->sim, self->num_kids, self->num_kids);

return self;
}
@@ -45,11 +41,9 @@
void
ANDScorer_destroy(ANDScorer *self)
{
- REFCOUNT_DEC(self->children);
free(self->subscorers);
- REFCOUNT_DEC(self->raw_prox_bb);
REFCOUNT_DEC(self->tally);
- Scorer_destroy((Scorer*)self);
+ PolyScorer_destroy((PolyScorer*)self);
}

i32_t
@@ -156,7 +150,7 @@
tally->score += subtally->score;
}

- tally->score *= self->coord;
+ tally->score *= self->coord_factors[ self->num_kids ];

return tally;
}

Added: trunk/c_src/KinoSearch/Search/PolyScorer.bp
===================================================================
--- trunk/c_src/KinoSearch/Search/PolyScorer.bp (rev 0)
+++ trunk/c_src/KinoSearch/Search/PolyScorer.bp 2008-08-30 02:00:52 UTC (rev 3798)
@@ -0,0 +1,27 @@
+parcel KinoSearch cnick Kino;
+
+/** Base class for composite scorers.
+ */
+
+class KinoSearch::Search::PolyScorer extends KinoSearch::Search::Scorer {
+
+ VArray *children;
+ u32_t num_kids;
+ float *coord_factors;
+
+ static incremented PolyScorer*
+ new(VArray *children, Similarity *similarity);
+
+ static PolyScorer*
+ init(PolyScorer *self, VArray *children, Similarity *similarity);
+
+ void
+ Destroy(PolyScorer *self);
+}
+
+/* Copyright 2008 Marvin Humphrey
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * under the same terms as Perl itself.
+ */
+

Added: trunk/c_src/KinoSearch/Search/PolyScorer.c
===================================================================
--- trunk/c_src/KinoSearch/Search/PolyScorer.c (rev 0)
+++ trunk/c_src/KinoSearch/Search/PolyScorer.c 2008-08-30 02:00:52 UTC (rev 3798)
@@ -0,0 +1,41 @@
+#include "KinoSearch/Util/ToolSet.h"
+
+#include "KinoSearch/Search/PolyScorer.h"
+#include "KinoSearch/Search/Similarity.h"
+
+PolyScorer*
+PolyScorer_new(VArray *children, Similarity *sim)
+{
+ PolyScorer *self = (PolyScorer*)CREATE(NULL, POLYSCORER);
+ return PolyScorer_init(self, children, sim);
+}
+
+PolyScorer*
+PolyScorer_init(PolyScorer *self, VArray *children, Similarity *sim)
+{
+ u32_t i;
+
+ Scorer_init((Scorer*)self, sim);
+ self->num_kids = children->size;
+ self->children = REFCOUNT_INC(children);
+ self->coord_factors = MALLOCATE(self->num_kids + 1, float);
+ for (i = 0; i <= self->num_kids; i++) {
+ self->coord_factors[i] = Sim_Coord(sim, i, self->num_kids);
+ }
+ return self;
+}
+
+void
+PolyScorer_destroy(PolyScorer *self)
+{
+ REFCOUNT_DEC(self->children);
+ free(self->coord_factors);
+ Scorer_destroy((Scorer*)self);
+}
+
+/* Copyright 2008 Marvin Humphrey
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * under the same terms as Perl itself.
+ */
+


_______________________________________________
kinosearch-commits mailing list
kinosearch-commits@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits