#ifndef H_KINO_ANDORSCORER
#define H_KINO_ANDORSCORER 1

#include "KinoSearch/Search/Scorer.r"

struct kino_Similarity;
struct kino_Tally;
struct kino_VArray;

typedef struct kino_ANDORScorer kino_ANDORScorer;
typedef struct KINO_ANDORSCORER_VTABLE KINO_ANDORSCORER_VTABLE;

KINO_CLASS("KinoSearch::Search::ANDORScorer", "ANDORScorer",
    "KinoSearch::Search::Scorer");

struct kino_ANDORScorer {
    KINO_ANDORSCORER_VTABLE *_;
    KINO_SCORER_MEMBER_VARS;
    struct kino_Tally   *tally;
    kino_Scorer         *and_scorer;   /**< required scorer */
    kino_Scorer         *or_scorer;    /**< optional scorer */
    chy_bool_t           or_scorer_first_time;
};

/* Constructor.
 */
kino_ANDORScorer* 
kino_ANDORScorer_new(struct kino_Similarity *sim, 
                     struct kino_Scorer *and_scorer, 
                     struct kino_Scorer *or_scorer);

void
kino_ANDORScorer_destroy(kino_ANDORScorer *self);
KINO_METHOD("Kino_ANDORScorer_Destroy");

chy_bool_t
kino_ANDORScorer_next(kino_ANDORScorer *self);
KINO_METHOD("Kino_ANDORScorer_Next");

chy_bool_t
kino_ANDORScorer_skip_to(kino_ANDORScorer *self, chy_u32_t target);
KINO_METHOD("Kino_ANDORScorer_Skip_To");

struct kino_Tally*
kino_ANDORScorer_tally(kino_ANDORScorer *self);
KINO_METHOD("Kino_ANDORScorer_Tally");

chy_u32_t 
kino_ANDORScorer_doc(kino_ANDORScorer *self);
KINO_METHOD("Kino_ANDORScorer_Doc");

chy_u32_t
kino_ANDORScorer_max_matchers(kino_ANDORScorer *self);
KINO_METHOD("Kino_ANDORScorer_Max_Matchers");

KINO_END_CLASS

#endif /* H_KINO_ANDORSCORER */

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