/** @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_BITVECTOR
#define R_KINO_BITVECTOR 1

#include "KinoSearch/Util/BitVector.h"

#define KINO_BITVECTOR_BOILERPLATE

typedef kino_BitVector*
(*kino_BitVec_clone_t)(kino_BitVector *self);

typedef void
(*kino_BitVec_destroy_t)(kino_BitVector* self);

typedef chy_bool_t
(*kino_BitVec_get_t)(const kino_BitVector *self, chy_u32_t num);

typedef void
(*kino_BitVec_set_t)(kino_BitVector *self, chy_u32_t num);

typedef void
(*kino_BitVec_clear_t)(kino_BitVector *self, chy_u32_t num);

typedef void
(*kino_BitVec_grow_t)(kino_BitVector *self, chy_u32_t capacity);

typedef void
(*kino_BitVec_and_t)(kino_BitVector *self, kino_BitVector *other);

typedef void
(*kino_BitVec_or_t)(kino_BitVector *self, kino_BitVector *other);

typedef void
(*kino_BitVec_xor_t)(kino_BitVector *self, kino_BitVector *other);

typedef void
(*kino_BitVec_and_not_t)(kino_BitVector *self, kino_BitVector *other);

typedef void
(*kino_BitVec_flip_t)(kino_BitVector *self, chy_u32_t num);

typedef void
(*kino_BitVec_flip_range_t)(kino_BitVector *self, chy_u32_t from_tick, 
                       chy_u32_t to_tick);

typedef chy_u32_t
(*kino_BitVec_count_t)(kino_BitVector *self);

typedef chy_u32_t*
(*kino_BitVec_to_array_t)(kino_BitVector *self);

#define Kino_BitVec_Clone(self) \
    (self)->_->clone((kino_Obj*)self)

#define Kino_BitVec_Destroy(self) \
    (self)->_->destroy((kino_Obj*)self)

#define Kino_BitVec_Equals(self, other) \
    (self)->_->equals((kino_Obj*)self, other)

#define Kino_BitVec_Hash_Code(self) \
    (self)->_->hash_code((kino_Obj*)self)

#define Kino_BitVec_Is_A(self, target_vtable) \
    (self)->_->is_a((kino_Obj*)self, target_vtable)

#define Kino_BitVec_To_String(self) \
    (self)->_->to_string((kino_Obj*)self)

#define Kino_BitVec_Serialize(self, target) \
    (self)->_->serialize((kino_Obj*)self, target)

#define Kino_BitVec_Get(self, num) \
    (self)->_->get((kino_BitVector*)self, num)

#define Kino_BitVec_Set(self, num) \
    (self)->_->set((kino_BitVector*)self, num)

#define Kino_BitVec_Clear(self, num) \
    (self)->_->clear((kino_BitVector*)self, num)

#define Kino_BitVec_Grow(self, capacity) \
    (self)->_->grow((kino_BitVector*)self, capacity)

#define Kino_BitVec_And(self, other) \
    (self)->_->and((kino_BitVector*)self, other)

#define Kino_BitVec_Or(self, other) \
    (self)->_->or((kino_BitVector*)self, other)

#define Kino_BitVec_Xor(self, other) \
    (self)->_->xor((kino_BitVector*)self, other)

#define Kino_BitVec_And_Not(self, other) \
    (self)->_->and_not((kino_BitVector*)self, other)

#define Kino_BitVec_Flip(self, num) \
    (self)->_->flip((kino_BitVector*)self, num)

#define Kino_BitVec_Flip_Range(self, from_tick, to_tick) \
    (self)->_->flip_range((kino_BitVector*)self, from_tick, to_tick)

#define Kino_BitVec_Count(self) \
    (self)->_->count((kino_BitVector*)self)

#define Kino_BitVec_To_Array(self) \
    (self)->_->to_array((kino_BitVector*)self)

struct KINO_BITVECTOR_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_BitVec_get_t get;
    kino_BitVec_set_t set;
    kino_BitVec_clear_t clear;
    kino_BitVec_grow_t grow;
    kino_BitVec_and_t and;
    kino_BitVec_or_t or;
    kino_BitVec_xor_t xor;
    kino_BitVec_and_not_t and_not;
    kino_BitVec_flip_t flip;
    kino_BitVec_flip_range_t flip_range;
    kino_BitVec_count_t count;
    kino_BitVec_to_array_t to_array;
};

extern KINO_BITVECTOR_VTABLE KINO_BITVECTOR;

#ifdef KINO_USE_SHORT_NAMES
  #define BitVector kino_BitVector
  #define BITVECTOR KINO_BITVECTOR
  #define BitVec_new kino_BitVec_new
  #define BitVec_init_base kino_BitVec_init_base
  #define BitVec_clone kino_BitVec_clone
  #define BitVec_destroy kino_BitVec_destroy
  #define BitVec_get_t kino_BitVec_get_t
  #define BitVec_get kino_BitVec_get
  #define BitVec_set_t kino_BitVec_set_t
  #define BitVec_set kino_BitVec_set
  #define BitVec_clear_t kino_BitVec_clear_t
  #define BitVec_clear kino_BitVec_clear
  #define BitVec_grow_t kino_BitVec_grow_t
  #define BitVec_grow kino_BitVec_grow
  #define BitVec_and_t kino_BitVec_and_t
  #define BitVec_and kino_BitVec_and
  #define BitVec_or_t kino_BitVec_or_t
  #define BitVec_or kino_BitVec_or
  #define BitVec_xor_t kino_BitVec_xor_t
  #define BitVec_xor kino_BitVec_xor
  #define BitVec_and_not_t kino_BitVec_and_not_t
  #define BitVec_and_not kino_BitVec_and_not
  #define BitVec_flip_t kino_BitVec_flip_t
  #define BitVec_flip kino_BitVec_flip
  #define BitVec_flip_range_t kino_BitVec_flip_range_t
  #define BitVec_flip_range kino_BitVec_flip_range
  #define BitVec_count_t kino_BitVec_count_t
  #define BitVec_count kino_BitVec_count
  #define BitVec_to_array_t kino_BitVec_to_array_t
  #define BitVec_to_array kino_BitVec_to_array
  #define BitVec_Clone Kino_BitVec_Clone
  #define BitVec_Destroy Kino_BitVec_Destroy
  #define BitVec_Equals Kino_BitVec_Equals
  #define BitVec_Hash_Code Kino_BitVec_Hash_Code
  #define BitVec_Is_A Kino_BitVec_Is_A
  #define BitVec_To_String Kino_BitVec_To_String
  #define BitVec_Serialize Kino_BitVec_Serialize
  #define BitVec_Get Kino_BitVec_Get
  #define BitVec_Set Kino_BitVec_Set
  #define BitVec_Clear Kino_BitVec_Clear
  #define BitVec_Grow Kino_BitVec_Grow
  #define BitVec_And Kino_BitVec_And
  #define BitVec_Or Kino_BitVec_Or
  #define BitVec_Xor Kino_BitVec_Xor
  #define BitVec_And_Not Kino_BitVec_And_Not
  #define BitVec_Flip Kino_BitVec_Flip
  #define BitVec_Flip_Range Kino_BitVec_Flip_Range
  #define BitVec_Count Kino_BitVec_Count
  #define BitVec_To_Array Kino_BitVec_To_Array
#endif /* KINO_USE_SHORT_NAMES */

#define KINO_BITVECTOR_MEMBER_VARS \
    chy_u32_t  refcount; \
    chy_u32_t  cap; \
    chy_u8_t * bits; \
    chy_u32_t  count

#ifdef KINO_WANT_BITVECTOR_VTABLE
KINO_BITVECTOR_VTABLE KINO_BITVECTOR = {
    (KINO_OBJ_VTABLE*)&KINO_VIRTUALTABLE,
    1,
    (KINO_OBJ_VTABLE*)&KINO_OBJ,
    "KinoSearch::Util::BitVector",
    (kino_Obj_clone_t)kino_BitVec_clone,
    (kino_Obj_destroy_t)kino_BitVec_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_BitVec_get_t)kino_BitVec_get,
    (kino_BitVec_set_t)kino_BitVec_set,
    (kino_BitVec_clear_t)kino_BitVec_clear,
    (kino_BitVec_grow_t)kino_BitVec_grow,
    (kino_BitVec_and_t)kino_BitVec_and,
    (kino_BitVec_or_t)kino_BitVec_or,
    (kino_BitVec_xor_t)kino_BitVec_xor,
    (kino_BitVec_and_not_t)kino_BitVec_and_not,
    (kino_BitVec_flip_t)kino_BitVec_flip,
    (kino_BitVec_flip_range_t)kino_BitVec_flip_range,
    (kino_BitVec_count_t)kino_BitVec_count,
    (kino_BitVec_to_array_t)kino_BitVec_to_array
};
#endif /* KINO_WANT_BITVECTOR_VTABLE */

#undef KINO_BITVECTOR_BOILERPLATE


#endif /* R_KINO_BITVECTOR */


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