/** @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_OUTSTREAM
#define R_KINO_OUTSTREAM 1

#include "KinoSearch/Store/OutStream.h"

#define KINO_OUTSTREAM_BOILERPLATE

typedef void
(*kino_OutStream_destroy_t)(kino_OutStream *self);

typedef chy_u64_t
(*kino_OutStream_stell_t)(kino_OutStream *self);

typedef void
(*kino_OutStream_sflush_t)(kino_OutStream *self);

typedef chy_u64_t
(*kino_OutStream_slength_t)(kino_OutStream *self);

typedef void
(*kino_OutStream_write_byte_t)(kino_OutStream *self, char aChar);

typedef void
(*kino_OutStream_write_bytes_t)(kino_OutStream *self, const char *buf, size_t len);

typedef void
(*kino_OutStream_write_int_t)(kino_OutStream *self, chy_u32_t);

typedef void
(*kino_OutStream_write_long_t)(kino_OutStream *self, chy_u64_t);

typedef void
(*kino_OutStream_write_vint_t)(kino_OutStream *self, chy_u32_t);

typedef void
(*kino_OutStream_write_vlong_t)(kino_OutStream *self, chy_u64_t);

typedef void
(*kino_OutStream_write_string_t)(kino_OutStream *self, const char *buf, 
                            size_t len);

typedef void
(*kino_OutStream_absorb_t)(kino_OutStream *self, struct kino_InStream *instream);

typedef void
(*kino_OutStream_sclose_t)(kino_OutStream *self);

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

#define Kino_OutStream_Destroy(self) \
    kino_OutStream_destroy((kino_OutStream*)self)

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

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

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

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

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

#define Kino_OutStream_STell(self) \
    kino_OutStream_stell((kino_OutStream*)self)

#define Kino_OutStream_SFlush(self) \
    kino_OutStream_sflush((kino_OutStream*)self)

#define Kino_OutStream_SLength(self) \
    kino_OutStream_slength((kino_OutStream*)self)

#define Kino_OutStream_Write_Byte(self, aChar) \
    kino_OutStream_write_byte((kino_OutStream*)self, aChar)

#define Kino_OutStream_Write_Bytes(self, buf, len) \
    kino_OutStream_write_bytes((kino_OutStream*)self, buf, len)

#define Kino_OutStream_Write_Int(self, chy_u32_t) \
    kino_OutStream_write_int((kino_OutStream*)self, chy_u32_t)

#define Kino_OutStream_Write_Long(self, chy_u64_t) \
    kino_OutStream_write_long((kino_OutStream*)self, chy_u64_t)

#define Kino_OutStream_Write_VInt(self, chy_u32_t) \
    kino_OutStream_write_vint((kino_OutStream*)self, chy_u32_t)

#define Kino_OutStream_Write_VLong(self, chy_u64_t) \
    kino_OutStream_write_vlong((kino_OutStream*)self, chy_u64_t)

#define Kino_OutStream_Write_String(self, buf, len) \
    kino_OutStream_write_string((kino_OutStream*)self, buf, len)

#define Kino_OutStream_Absorb(self, instream) \
    kino_OutStream_absorb((kino_OutStream*)self, instream)

#define Kino_OutStream_SClose(self) \
    kino_OutStream_sclose((kino_OutStream*)self)

struct KINO_OUTSTREAM_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_OutStream_stell_t stell;
    kino_OutStream_sflush_t sflush;
    kino_OutStream_slength_t slength;
    kino_OutStream_write_byte_t write_byte;
    kino_OutStream_write_bytes_t write_bytes;
    kino_OutStream_write_int_t write_int;
    kino_OutStream_write_long_t write_long;
    kino_OutStream_write_vint_t write_vint;
    kino_OutStream_write_vlong_t write_vlong;
    kino_OutStream_write_string_t write_string;
    kino_OutStream_absorb_t absorb;
    kino_OutStream_sclose_t sclose;
};

extern KINO_OUTSTREAM_VTABLE KINO_OUTSTREAM;

#ifdef KINO_USE_SHORT_NAMES
  #define OutStream kino_OutStream
  #define OUTSTREAM KINO_OUTSTREAM
  #define OutStream_new kino_OutStream_new
  #define OutStream_destroy_t kino_OutStream_destroy_t
  #define OutStream_destroy kino_OutStream_destroy
  #define OutStream_stell_t kino_OutStream_stell_t
  #define OutStream_stell kino_OutStream_stell
  #define OutStream_sflush_t kino_OutStream_sflush_t
  #define OutStream_sflush kino_OutStream_sflush
  #define OutStream_slength_t kino_OutStream_slength_t
  #define OutStream_slength kino_OutStream_slength
  #define OutStream_write_byte_t kino_OutStream_write_byte_t
  #define OutStream_write_byte kino_OutStream_write_byte
  #define OutStream_write_bytes_t kino_OutStream_write_bytes_t
  #define OutStream_write_bytes kino_OutStream_write_bytes
  #define OutStream_write_int_t kino_OutStream_write_int_t
  #define OutStream_write_int kino_OutStream_write_int
  #define OutStream_write_long_t kino_OutStream_write_long_t
  #define OutStream_write_long kino_OutStream_write_long
  #define OutStream_write_vint_t kino_OutStream_write_vint_t
  #define OutStream_write_vint kino_OutStream_write_vint
  #define OutStream_write_vlong_t kino_OutStream_write_vlong_t
  #define OutStream_write_vlong kino_OutStream_write_vlong
  #define OutStream_write_string_t kino_OutStream_write_string_t
  #define OutStream_write_string kino_OutStream_write_string
  #define OutStream_absorb_t kino_OutStream_absorb_t
  #define OutStream_absorb kino_OutStream_absorb
  #define OutStream_sclose_t kino_OutStream_sclose_t
  #define OutStream_sclose kino_OutStream_sclose
  #define OutStream_Clone Kino_OutStream_Clone
  #define OutStream_Destroy Kino_OutStream_Destroy
  #define OutStream_Equals Kino_OutStream_Equals
  #define OutStream_Hash_Code Kino_OutStream_Hash_Code
  #define OutStream_Is_A Kino_OutStream_Is_A
  #define OutStream_To_String Kino_OutStream_To_String
  #define OutStream_Serialize Kino_OutStream_Serialize
  #define OutStream_STell Kino_OutStream_STell
  #define OutStream_SFlush Kino_OutStream_SFlush
  #define OutStream_SLength Kino_OutStream_SLength
  #define OutStream_Write_Byte Kino_OutStream_Write_Byte
  #define OutStream_Write_Bytes Kino_OutStream_Write_Bytes
  #define OutStream_Write_Int Kino_OutStream_Write_Int
  #define OutStream_Write_Long Kino_OutStream_Write_Long
  #define OutStream_Write_VInt Kino_OutStream_Write_VInt
  #define OutStream_Write_VLong Kino_OutStream_Write_VLong
  #define OutStream_Write_String Kino_OutStream_Write_String
  #define OutStream_Absorb Kino_OutStream_Absorb
  #define OutStream_SClose Kino_OutStream_SClose
#endif /* KINO_USE_SHORT_NAMES */

#define KINO_OUTSTREAM_MEMBER_VARS \
    chy_u32_t  refcount; \
    char * buf; \
    chy_u64_t  buf_start; \
    chy_u32_t  buf_pos; \
    struct kino_FileDes * file_des; \
    chy_bool_t  is_closed

#ifdef KINO_WANT_OUTSTREAM_VTABLE
KINO_OUTSTREAM_VTABLE KINO_OUTSTREAM = {
    (KINO_OBJ_VTABLE*)&KINO_VIRTUALTABLE,
    1,
    (KINO_OBJ_VTABLE*)&KINO_OBJ,
    "KinoSearch::Store::OutStream",
    (kino_Obj_clone_t)kino_Obj_clone,
    (kino_Obj_destroy_t)kino_OutStream_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_OutStream_stell_t)kino_OutStream_stell,
    (kino_OutStream_sflush_t)kino_OutStream_sflush,
    (kino_OutStream_slength_t)kino_OutStream_slength,
    (kino_OutStream_write_byte_t)kino_OutStream_write_byte,
    (kino_OutStream_write_bytes_t)kino_OutStream_write_bytes,
    (kino_OutStream_write_int_t)kino_OutStream_write_int,
    (kino_OutStream_write_long_t)kino_OutStream_write_long,
    (kino_OutStream_write_vint_t)kino_OutStream_write_vint,
    (kino_OutStream_write_vlong_t)kino_OutStream_write_vlong,
    (kino_OutStream_write_string_t)kino_OutStream_write_string,
    (kino_OutStream_absorb_t)kino_OutStream_absorb,
    (kino_OutStream_sclose_t)kino_OutStream_sclose
};
#endif /* KINO_WANT_OUTSTREAM_VTABLE */

#undef KINO_OUTSTREAM_BOILERPLATE


#endif /* R_KINO_OUTSTREAM */


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