00001 00025 #ifndef __BASE2_FRIEND_H__ 00026 #define __BASE2_FRIEND_H__ 00027 00028 #include "base2.h" 00029 00031 typedef struct base2_private_st_ *base2_private_handle; 00032 00034 typedef struct base2_st_ { 00036 base2_private_handle private_h; 00038 uint32_t val1; 00039 } base2_st; 00040 00044 typedef void 00045 (*base2_delete_fn)(base2_handle base2_h); 00046 00050 typedef my_rc_e 00051 (*base2_increase_val1_fn)(base2_handle base2_h); 00052 00056 typedef const char * 00057 (*base2_type_string_fn)(base2_handle base2_h); 00058 00062 typedef my_rc_e 00063 (*base2_string_fn)(base2_handle base2_h, char *buffer, size_t buffer_size); 00064 00068 typedef my_rc_e 00069 (*base2_string_size_fn)(base2_handle base2_h, size_t *buffer_size); 00070 00076 typedef struct base2_vtable_st_ { 00078 base2_delete_fn delete_fn; 00080 base2_type_string_fn type_string_fn; 00082 base2_string_fn string_fn; 00084 base2_string_size_fn string_size_fn; 00086 base2_increase_val1_fn increase_val1_fn; 00087 } base2_vtable_st; 00088 00089 /* APIs below are documented in their implementation file */ 00090 00091 extern my_rc_e 00092 base2_inherit_vtable(const base2_vtable_st *parent_vtable, 00093 base2_vtable_st *child_vtable, 00094 bool do_null_check); 00095 00096 extern my_rc_e 00097 base2_set_vtable(base2_handle base2_h, base2_vtable_st *vtable); 00098 00099 extern void 00100 base2_friend_delete(base2_handle base2_h); 00101 00102 extern my_rc_e 00103 base2_init(base2_handle base2_h); 00104 00105 #endif