00001 00025 #ifndef __BASE1_FRIEND_H__ 00026 #define __BASE1_FRIEND_H__ 00027 00028 #include "base1.h" 00029 00031 typedef struct base1_private_st_ *base1_private_handle; 00032 00034 typedef struct base1_st_ { 00036 base1_private_handle private_h; 00038 base1_public_data_st public_data; 00040 uint32_t val3; 00041 } base1_st; 00042 00046 typedef void 00047 (*base1_delete_fn)(base1_handle base1_h); 00048 00052 typedef const char * 00053 (*base1_type_string_fn)(base1_handle base1_h); 00054 00058 typedef my_rc_e 00059 (*base1_string_fn)(base1_handle base1_h, char *buffer, size_t buffer_size); 00060 00064 typedef my_rc_e 00065 (*base1_string_size_fn)(base1_handle base1_h, size_t *buffer_size); 00066 00070 typedef my_rc_e 00071 (*base1_increase_val3_fn)(base1_handle base1_h); 00072 00078 typedef struct base1_vtable_st_ { 00080 base1_delete_fn delete_fn; 00082 base1_type_string_fn type_string_fn; 00084 base1_string_fn string_fn; 00086 base1_string_size_fn string_size_fn; 00088 base1_increase_val3_fn increase_val3_fn; 00089 } base1_vtable_st; 00090 00091 /* APIs below are documented in their implementation file */ 00092 00093 extern my_rc_e 00094 base1_inherit_vtable(const base1_vtable_st *parent_vtable, 00095 base1_vtable_st *child_vtable, 00096 bool do_null_check); 00097 00098 extern my_rc_e 00099 base1_set_vtable(base1_handle base1_h, base1_vtable_st *vtable); 00100 00101 extern void 00102 base1_friend_delete(base1_handle base1_h); 00103 00104 extern my_rc_e 00105 base1_init(base1_handle base1_h); 00106 00107 #endif