00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef WODEN_ELEMENT_EXTENSIBLE_H
00018 #define WODEN_ELEMENT_EXTENSIBLE_H
00019
00027 #include <axis2_allocator.h>
00028 #include <axis2_env.h>
00029 #include <axis2_error.h>
00030 #include <axis2_string.h>
00031 #include <axis2_utils.h>
00032 #include <axis2_hash.h>
00033 #include <axis2_qname.h>
00034 #include <axis2_uri.h>
00035 #include <axis2_array_list.h>
00036 #include <woden.h>
00037
00038 #ifdef __cplusplus
00039 extern "C"
00040 {
00041 #endif
00042
00043 typedef struct woden_element_extensible woden_element_extensible_t;
00044 typedef struct woden_element_extensible_ops woden_element_extensible_ops_t;
00045 struct woden_ext_element;
00046
00052 struct woden_element_extensible_ops
00053 {
00058 axis2_status_t (AXIS2_CALL *
00059 free) (
00060 void *
00061 element_extensible,
00062 const axis2_env_t *env);
00063
00064 axis2_hash_t *(AXIS2_CALL *
00065 super_objs) (
00066 void *
00067 element_extensible,
00068 const axis2_env_t *env);
00069
00070 woden_obj_types_t (AXIS2_CALL *
00071 type) (
00072 void *element_extensible,
00073 const axis2_env_t *env);
00074
00075 axis2_status_t (AXIS2_CALL *
00076 add_ext_element) (
00077 void *extensible,
00078 const axis2_env_t *env,
00079 struct woden_ext_element *ext_el);
00080
00081 axis2_status_t (AXIS2_CALL *
00082 remove_ext_element) (
00083 void *extensible,
00084 const axis2_env_t *env,
00085 struct woden_ext_element *ext_el);
00086
00087 axis2_array_list_t *(AXIS2_CALL *
00088 get_ext_elements) (
00089 void *extensible,
00090 const axis2_env_t *env);
00091
00092 axis2_array_list_t *(AXIS2_CALL *
00093 get_ext_elements_of_type) (
00094 void *extensible,
00095 const axis2_env_t *env,
00096 axis2_qname_t *ext_type);
00097
00098 axis2_bool_t (AXIS2_CALL *
00099 has_ext_elements_for_namespace) (
00100 void *extensible,
00101 const axis2_env_t *env,
00102 axis2_uri_t *namespc);
00103
00104 };
00105
00106 struct woden_element_extensible
00107 {
00108 woden_element_extensible_ops_t *ops;
00109 };
00110
00111 AXIS2_EXTERN woden_element_extensible_t * AXIS2_CALL
00112 woden_element_extensible_create(const axis2_env_t *env);
00113
00118 AXIS2_EXTERN axis2_status_t AXIS2_CALL
00119 woden_element_extensible_resolve_methods(
00120 woden_element_extensible_t *extensible,
00121 const axis2_env_t *env,
00122 woden_element_extensible_t *extensible_impl,
00123 axis2_hash_t *methods);
00124
00125 #define WODEN_ELEMENT_EXTENSIBLE_FREE(extensible, env) \
00126 (((woden_element_extensible_t *) extensible)->ops->\
00127 free (extensible, env))
00128
00129 #define WODEN_ELEMENT_EXTENSIBLE_SUPER_OBJS(extensible, env) \
00130 (((woden_element_extensible_t *) extensible)->ops->\
00131 super_objs (extensible, env))
00132
00133 #define WODEN_ELEMENT_EXTENSIBLE_TYPE(extensible, env) \
00134 (((woden_element_extensible_t *) extensible)->ops->\
00135 type (extensible, env))
00136
00137 #define WODEN_ELEMENT_EXTENSIBLE_ADD_EXT_ELEMENT(extensible, env, ext_el) \
00138 (((woden_element_extensible_t *) extensible)->ops->\
00139 add_ext_element(extensible, env, ext_el))
00140
00141 #define WODEN_ELEMENT_EXTENSIBLE_REMOVE_EXT_ELEMENT(extensible, env, \
00142 ext_el) \
00143 (((woden_element_extensible_t *) extensible)->ops->\
00144 remove_ext_element(extensible, env, ext_el))
00145
00146 #define WODEN_ELEMENT_EXTENSIBLE_GET_EXT_ELEMENTS(extensible, env) \
00147 (((woden_element_extensible_t *) extensible)->ops->\
00148 get_ext_elements(extensible, env))
00149
00150 #define WODEN_ELEMENT_EXTENSIBLE_GET_EXT_ELEMENTS_OF_TYPE(extensible, \
00151 env, ext_type) \
00152 (((woden_element_extensible_t *) extensible)->ops->\
00153 get_ext_elements_of_type(extensible, env, ext_type))
00154
00155 #define WODEN_ELEMENT_EXTENSIBLE_HAS_EXT_ELEMENTS_FOR_NAMESPACE(\
00156 extensible, env, namespc) \
00157 (((woden_element_extensible_t *) extensible)->ops->\
00158 has_ext_elements_for_namespace(extensible, env, namespc))
00159
00160
00162 #ifdef __cplusplus
00163 }
00164 #endif
00165 #endif