00001 00025 #ifndef __DERIVED1_FRIEND_H__ 00026 #define __DERIVED1_FRIEND_H__ 00027 00028 #include "derived1.h" 00029 #include "base1_friend.h" 00030 #include "base2_friend.h" 00031 00033 typedef struct derived1_private_st_ *derived1_private_handle; 00034 00036 typedef struct derived1_st_ { 00038 derived1_private_handle private_h; 00040 base1_st base1; 00042 base2_st base2; 00044 uint32_t val4; 00045 } derived1_st; 00046 00050 typedef void 00051 (*derived1_delete_fn)(derived1_handle derived1_h); 00052 00056 typedef my_rc_e 00057 (*derived1_increase_val4_fn)(derived1_handle derived1_h); 00058 00064 typedef struct derived1_vtable_st_ { 00066 base1_vtable_st *base1_vtable; 00068 base2_vtable_st *base2_vtable; 00070 derived1_delete_fn delete_fn; 00072 derived1_increase_val4_fn increase_val4_fn; 00073 } derived1_vtable_st; 00074 00075 /* APIs below are documented in their implementation file */ 00076 00077 extern my_rc_e 00078 derived1_inherit_vtable(const derived1_vtable_st *parent_vtable, 00079 derived1_vtable_st *child_vtable, 00080 bool do_null_check); 00081 00082 extern my_rc_e 00083 derived1_set_vtable(derived1_handle derived1_h, derived1_vtable_st *vtable); 00084 00085 extern void 00086 derived1_friend_delete(derived1_handle derived1_h); 00087 00088 extern my_rc_e 00089 derived1_init(derived1_handle derived1_h); 00090 00091 #endif