/** @file */
/***********************************************

 !!!! DO NOT EDIT THIS FILE !!!!

 All content has been auto-generated by 
 the boilerplater.pl utility.

 See boilerplater's documentation for details.

 ***********************************************/



#ifndef R_KINO_PRESORTER
#define R_KINO_PRESORTER 1

#include "KinoSearch/Index/PreSorter.h"

#define KINO_PRESORTER_BOILERPLATE

typedef void
(*kino_PreSorter_destroy_t)(kino_PreSorter *self);

typedef void
(*kino_PreSorter_add_val_t)(kino_PreSorter *self, chy_u32_t doc_num, 
                       const struct kino_ByteBuf *val);

typedef void
(*kino_PreSorter_add_seg_data_t)(kino_PreSorter *self, chy_u32_t seg_max_doc,
                            struct kino_SegLexicon *lexicon,
                            struct kino_IntMap *sort_cache,
                            struct kino_IntMap *seg_doc_remap);

typedef struct kino_IntMap*
(*kino_PreSorter_gen_remap_t)(kino_PreSorter *self);

#define Kino_PreSorter_Clone(self) \
    kino_Obj_clone((kino_Obj*)self)

#define Kino_PreSorter_Destroy(self) \
    kino_PreSorter_destroy((kino_PreSorter*)self)

#define Kino_PreSorter_Equals(self, other) \
    kino_Obj_equals((kino_Obj*)self, other)

#define Kino_PreSorter_Hash_Code(self) \
    kino_Obj_hash_code((kino_Obj*)self)

#define Kino_PreSorter_Is_A(self, target_vtable) \
    kino_Obj_is_a((kino_Obj*)self, target_vtable)

#define Kino_PreSorter_To_String(self) \
    kino_Obj_to_string((kino_Obj*)self)

#define Kino_PreSorter_Serialize(self, target) \
    kino_Obj_serialize((kino_Obj*)self, target)

#define Kino_PreSorter_Add_Val(self, doc_num, val) \
    kino_PreSorter_add_val((kino_PreSorter*)self, doc_num, val)

#define Kino_PreSorter_Add_Seg_Data(self, seg_max_doc, lexicon, sort_cache, seg_doc_remap) \
    kino_PreSorter_add_seg_data((kino_PreSorter*)self, seg_max_doc, lexicon, sort_cache, seg_doc_remap)

#define Kino_PreSorter_Gen_Remap(self) \
    kino_PreSorter_gen_remap((kino_PreSorter*)self)

struct KINO_PRESORTER_VTABLE {
    KINO_OBJ_VTABLE *_;
    chy_u32_t refcount;
    KINO_OBJ_VTABLE *parent;
    const char *class_name;
    kino_Obj_clone_t clone;
    kino_Obj_destroy_t destroy;
    kino_Obj_equals_t equals;
    kino_Obj_hash_code_t hash_code;
    kino_Obj_is_a_t is_a;
    kino_Obj_to_string_t to_string;
    kino_Obj_serialize_t serialize;
    kino_PreSorter_add_val_t add_val;
    kino_PreSorter_add_seg_data_t add_seg_data;
    kino_PreSorter_gen_remap_t gen_remap;
};

extern KINO_PRESORTER_VTABLE KINO_PRESORTER;

#ifdef KINO_USE_SHORT_NAMES
  #define PreSorter kino_PreSorter
  #define PRESORTER KINO_PRESORTER
  #define PreSorter_new kino_PreSorter_new
  #define PreSorter_destroy_t kino_PreSorter_destroy_t
  #define PreSorter_destroy kino_PreSorter_destroy
  #define PreSorter_add_val_t kino_PreSorter_add_val_t
  #define PreSorter_add_val kino_PreSorter_add_val
  #define PreSorter_add_seg_data_t kino_PreSorter_add_seg_data_t
  #define PreSorter_add_seg_data kino_PreSorter_add_seg_data
  #define PreSorter_gen_remap_t kino_PreSorter_gen_remap_t
  #define PreSorter_gen_remap kino_PreSorter_gen_remap
  #define PreSorter_Clone Kino_PreSorter_Clone
  #define PreSorter_Destroy Kino_PreSorter_Destroy
  #define PreSorter_Equals Kino_PreSorter_Equals
  #define PreSorter_Hash_Code Kino_PreSorter_Hash_Code
  #define PreSorter_Is_A Kino_PreSorter_Is_A
  #define PreSorter_To_String Kino_PreSorter_To_String
  #define PreSorter_Serialize Kino_PreSorter_Serialize
  #define PreSorter_Add_Val Kino_PreSorter_Add_Val
  #define PreSorter_Add_Seg_Data Kino_PreSorter_Add_Seg_Data
  #define PreSorter_Gen_Remap Kino_PreSorter_Gen_Remap
#endif /* KINO_USE_SHORT_NAMES */

#define KINO_PRESORTER_MEMBER_VARS \
    chy_u32_t  refcount; \
    struct kino_ByteBuf * field; \
    chy_bool_t  reverse; \
    kino_MSort_compare_t  compare; \
    struct kino_Hash * vals; \
    struct kino_VArray * doc_vals; \
    struct kino_IntMap * doc_remap; \
    struct kino_ByteBuf * scratch

#ifdef KINO_WANT_PRESORTER_VTABLE
KINO_PRESORTER_VTABLE KINO_PRESORTER = {
    (KINO_OBJ_VTABLE*)&KINO_VIRTUALTABLE,
    1,
    (KINO_OBJ_VTABLE*)&KINO_OBJ,
    "KinoSearch::Index::PreSorter",
    (kino_Obj_clone_t)kino_Obj_clone,
    (kino_Obj_destroy_t)kino_PreSorter_destroy,
    (kino_Obj_equals_t)kino_Obj_equals,
    (kino_Obj_hash_code_t)kino_Obj_hash_code,
    (kino_Obj_is_a_t)kino_Obj_is_a,
    (kino_Obj_to_string_t)kino_Obj_to_string,
    (kino_Obj_serialize_t)kino_Obj_serialize,
    (kino_PreSorter_add_val_t)kino_PreSorter_add_val,
    (kino_PreSorter_add_seg_data_t)kino_PreSorter_add_seg_data,
    (kino_PreSorter_gen_remap_t)kino_PreSorter_gen_remap
};
#endif /* KINO_WANT_PRESORTER_VTABLE */

#undef KINO_PRESORTER_BOILERPLATE


#endif /* R_KINO_PRESORTER */


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