#ifndef H_KINO_LEXREADER
#define H_KINO_LEXREADER 1
#include "KinoSearch/Util/Obj.r"
typedef struct kino_LexReader kino_LexReader;
typedef struct KINO_LEXREADER_VTABLE KINO_LEXREADER_VTABLE;
struct kino_Schema;
struct kino_Folder;
struct kino_SegInfo;
struct kino_Term;
struct kino_TermInfo;
KINO_CLASS("KinoSearch::Index::LexReader", "LexReader",
"KinoSearch::Util::Obj");
struct kino_LexReader {
KINO_LEXREADER_VTABLE *_;
KINO_OBJ_MEMBER_VARS;
struct kino_Schema *schema;
struct kino_Folder *folder;
struct kino_SegInfo *seg_info;
struct kino_SegLexicon **lexicons;
chy_u32_t num_fields;
chy_i32_t index_interval;
chy_i32_t skip_interval;
};
kino_LexReader*
kino_LexReader_new(struct kino_Schema *schema, struct kino_Folder *folder,
struct kino_SegInfo *seg_info);
void
kino_LexReader_destroy(kino_LexReader *self);
KINO_METHOD("Kino_LexReader_Destroy");
/* Return a SegLexicon pre-seeked to the supplied Term.
*
* Will return NULL if...
*
* o the field is not indexed
* o the field is not represented in this segment
* o the target term is NULL
*/
struct kino_SegLexicon*
kino_LexReader_look_up_term(kino_LexReader *self,
struct kino_Term *target);
KINO_METHOD("Kino_LexReader_Look_Up_Term");
struct kino_SegLexicon*
kino_LexReader_look_up_field(kino_LexReader *self,
struct kino_ByteBuf *field_name);
KINO_METHOD("Kino_LexReader_Look_Up_Field");
/* If the term can be found, return a term info, otherwise return NULL.
*/
struct kino_TermInfo*
kino_LexReader_fetch_term_info(kino_LexReader *self,
struct kino_Term *term);
KINO_METHOD("Kino_LexReader_Fetch_Term_Info");
chy_u32_t
kino_LexReader_get_skip_interval(kino_LexReader *self);
KINO_METHOD("Kino_LexReader_Get_Skip_Interval");
void
kino_LexReader_close(kino_LexReader *self);
KINO_METHOD("Kino_LexReader_Close");
KINO_END_CLASS
#endif /* H_KINO_LEXREADER */
/* Copyright 2006-2007 Marvin Humphrey
*
* This program is free software; you can redistribute it and/or modify
* under the same terms as Perl itself.
*/