#ifndef H_KINO_FIELDDOCCOLLATOR
#define H_KINO_FIELDDOCCOLLATOR 1

#include "KinoSearch/Util/Obj.r"

typedef struct kino_FieldDocCollator kino_FieldDocCollator;
typedef struct KINO_FIELDDOCCOLLATOR_VTABLE KINO_FIELDDOCCOLLATOR_VTABLE;

struct kino_IntMap;

KINO_CLASS("KinoSearch::Search::FieldDocCollator", "FDocCollator",
    "KinoSearch::Util::Obj");

struct kino_FieldDocCollator {
    KINO_FIELDDOCCOLLATOR_VTABLE *_;
    KINO_OBJ_MEMBER_VARS;
    chy_u32_t                  cap;
    chy_u32_t                  size;
    struct kino_IntMap       **sort_caches;
    chy_bool_t                *reversed;
};

/* Constructor.
 */
kino_FieldDocCollator*
kino_FDocCollator_new();

/* Add a sort criteria.
 */
void
kino_FDocCollator_add(kino_FieldDocCollator *self, 
                      struct kino_IntMap *sort_cache, 
                      chy_bool_t reverse);

/* Compare two FieldDocs.
 */
chy_bool_t
kino_FDocCollator_less_than(const void *va, const void *vb);

/* Compare the components of two FieldDocs.
 */
chy_bool_t
kino_FDocCollator_compare(kino_FieldDocCollator *self, 
                          chy_u32_t doc_num_a, float score_a, 
                          chy_u32_t doc_num_b, float score_b);
KINO_METHOD("Kino_FDocCollator_Compare");


void
kino_FDocCollator_destroy(kino_FieldDocCollator *self);
KINO_METHOD("Kino_FDocCollator_Destroy");

KINO_END_CLASS

#endif /* H_KINO_FIELDDOCCOLLATOR */

/* Copyright 2006-2007 Marvin Humphrey
 *
 * This program is free software; you can redistribute it and/or modify
 * under the same terms as Perl itself.
 */