#include "KinoSearch/Util/ToolSet.h"
#define KINO_WANT_TALLY_VTABLE
#include "KinoSearch/Search/Tally.r"
#include "KinoSearch/Search/ScoreProx.r"
/* Compare two ScoreProx objects by field number.
*/
static int
compare_sproxen(const void *va, const void *vb);
Tally*
Tally_new()
{
CREATE(self, Tally, TALLY);
self->score = 0.0f;
self->num_matchers = 1;
self->num_sproxen = 0;
self->sprox_cap = 0;
self->sproxen = NULL;
return self;
}
void
Tally_destroy(Tally *self)
{
free(self->sproxen);
free(self);
}
void
Tally_add_sprox(Tally *self, ScoreProx *sprox)
{
if (self->num_sproxen >= self->sprox_cap) {
self->sprox_cap += 1;
self->sproxen = REALLOCATE(self->sproxen, self->sprox_cap,
ScoreProx*);
}
/* add and sort by field num */
self->sproxen[ self->num_sproxen++ ] = sprox;
qsort(self->sproxen, self->num_sproxen, sizeof(ScoreProx*),
compare_sproxen);
}
void
Tally_zap_sproxen(Tally *self)
{
self->num_sproxen = 0;
}
static int
compare_sproxen(const void *va, const void *vb)
{
ScoreProx *const sprox_a = (ScoreProx*)va;
ScoreProx *const sprox_b = (ScoreProx*)vb;
return sprox_a->field_num - sprox_b->field_num;
}
/* Copyright 2006-2007 Marvin Humphrey
*
* This program is free software; you can redistribute it and/or modify
* under the same terms as Perl itself.
*/