00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef WODEN_NESTED_CONFIGURABLE_H
00018 #define WODEN_NESTED_CONFIGURABLE_H
00019
00030 #include <woden.h>
00031 #include <woden_nested_component.h>
00032 #include <woden_nested_element.h>
00033 #include <woden_configurable.h>
00034
00040 typedef union woden_nested_configurable_base woden_nested_configurable_base_t;
00041 typedef struct woden_nested_configurable woden_nested_configurable_t;
00042 typedef struct woden_nested_configurable_ops woden_nested_configurable_ops_t;
00043
00044 #ifdef __cplusplus
00045 extern "C"
00046 {
00047 #endif
00048
00049 struct woden_nested_configurable_ops
00050 {
00055 axis2_status_t (AXIS2_CALL *
00056 free) (
00057 void *nested_configurable,
00058 const axis2_env_t *env);
00059
00060 axis2_status_t (AXIS2_CALL *
00061 to_nested_configurable_free) (
00062 void *nested_configurable,
00063 const axis2_env_t *env);
00064
00065 axis2_hash_t *(AXIS2_CALL *
00066 super_objs) (
00067 void *nested_configurable,
00068 const axis2_env_t *env);
00069
00073 struct woden_configurable *(AXIS2_CALL *
00074 get_base_impl) (
00075 void *nested_configurable,
00076 const axis2_env_t *env);
00077
00078 };
00079
00080 union woden_nested_configurable_base
00081 {
00082 woden_configurable_t configurable;
00083 woden_nested_element_t nested_element;
00084 woden_nested_component_t nested_component;
00085 };
00086
00087 struct woden_nested_configurable
00088 {
00089 woden_nested_configurable_base_t base;
00090 woden_nested_configurable_ops_t *ops;
00091 };
00092
00093 AXIS2_EXTERN woden_nested_configurable_t * AXIS2_CALL
00094 woden_nested_configurable_create(
00095 const axis2_env_t *env);
00096
00097
00098 AXIS2_EXTERN woden_nested_configurable_t * AXIS2_CALL
00099 woden_nested_configurable_to_nested_element(
00100 void *nested_configurable,
00101 const axis2_env_t *env);
00102
00103 AXIS2_EXTERN axis2_status_t AXIS2_CALL
00104 woden_nested_configurable_resolve_methods(
00105 woden_nested_configurable_t *nested_configurable,
00106 const axis2_env_t *env,
00107 woden_nested_configurable_t *nested_configurable_impl,
00108 axis2_hash_t *methods);
00109
00110
00111
00112 #define WODEN_NESTED_CONFIGURABLE_FREE(nested_configurable, env) \
00113 (((woden_nested_configurable_t *) nested_configurable)->ops->\
00114 free(nested_configurable, env))
00115
00116 #define WODEN_NESTED_CONFIGURABLE_TO_NESTED_CONFIGURABLE_FREE(nested_configurable, env) \
00117 (((woden_nested_configurable_t *) nested_configurable)->ops->\
00118 to_nested_configurable_free(nested_configurable, env))
00119
00120 #define WODEN_NESTED_CONFIGURABLE_SUPER_OBJS(nested_configurable, env) \
00121 (((woden_nested_configurable_t *) nested_configurable)->ops->\
00122 super_objs(nested_configurable, env))
00123
00124 #define WODEN_NESTED_CONFIGURABLE_GET_BASE_IMPL(nested_configurable, env) \
00125 (((woden_nested_configurable_t *) nested_configurable)->ops->\
00126 get_base_impl(nested_configurable, env))
00127
00129 #ifdef __cplusplus
00130 }
00131 #endif
00132 #endif