#define C_KINO_POLYMATCHER
#include "KinoSearch/Util/ToolSet.h"
#include "KinoSearch/Search/PolyMatcher.h"
#include "KinoSearch/Index/Similarity.h"
PolyMatcher*
PolyMatcher_new(VArray *children, Similarity *sim)
{
PolyMatcher *self = (PolyMatcher*)VTable_Make_Obj(POLYMATCHER);
return PolyMatcher_init(self, children, sim);
}
PolyMatcher*
PolyMatcher_init(PolyMatcher *self, VArray *children, Similarity *similarity)
{
uint32_t i;
Matcher_init((Matcher*)self);
self->num_kids = VA_Get_Size(children);
self->sim = (Similarity*)INCREF(similarity);
self->children = (VArray*)INCREF(children);
self->coord_factors = (float*)MALLOCATE((self->num_kids + 1) * sizeof(float));
for (i = 0; i <= self->num_kids; i++) {
self->coord_factors[i] = similarity
? Sim_Coord(similarity, i, self->num_kids)
: 1.0f;
}
return self;
}
void
PolyMatcher_destroy(PolyMatcher *self)
{
DECREF(self->children);
DECREF(self->sim);
FREEMEM(self->coord_factors);
SUPER_DESTROY(self, POLYMATCHER);
}
/* Copyright 2008-2011 Marvin Humphrey
*
* This program is free software; you can redistribute it and/or modify
* under the same terms as Perl itself.
*/