00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef AXIOM_NAVIGATOR_H
00019 #define AXIOM_NAVIGATOR_H
00020
00026 #include <axis2_utils.h>
00027 #include <axis2_env.h>
00028 #include <axiom_node.h>
00029
00030 #ifdef __cplusplus
00031 extern "C"
00032 {
00033 #endif
00034
00041 typedef struct axiom_navigator axiom_navigator_t;
00042
00043 typedef struct axiom_navigator_ops axiom_navigator_ops_t;
00044
00050 struct axiom_navigator_ops
00051 {
00059 axis2_status_t (AXIS2_CALL *
00060 free)(axiom_navigator_t *om_navigator,
00061 const axis2_env_t *env);
00062
00071 axis2_bool_t (AXIS2_CALL *
00072 is_navigable)(axiom_navigator_t *om_navigator,
00073 const axis2_env_t *env);
00074
00085 axis2_bool_t (AXIS2_CALL *
00086 is_completed)(axiom_navigator_t *om_navigator,
00087 const axis2_env_t *env);
00088
00099 axiom_node_t* (AXIS2_CALL *
00100 next)(axiom_navigator_t *om_navigator,
00101 const axis2_env_t *env);
00102
00110 axis2_bool_t (AXIS2_CALL *
00111 visited)(axiom_navigator_t *om_navigator,
00112 const axis2_env_t *env);
00113
00114 };
00115
00118 struct axiom_navigator
00119 {
00120 axiom_navigator_ops_t *ops;
00121 };
00122
00131 AXIS2_EXTERN axiom_navigator_t * AXIS2_CALL
00132 axiom_navigator_create(const axis2_env_t *env,
00133 axiom_node_t *node);
00134
00137 #define AXIOM_NAVIGATOR_FREE(navigator, env) \
00138 ((navigator)->ops->free(navigator, env))
00139
00140 #define AXIOM_NAVIGATOR_IS_NAVIGABLE(navigator, env) \
00141 ((navigator)->ops->is_navigable(navigator, env))
00142
00143 #define AXIOM_NAVIGATOR_IS_COMPLETED(navigator, env) \
00144 ((navigator)->ops->is_completed(navigator, env))
00145
00146 #define AXIOM_NAVIGATOR_VISITED(navigator, env) \
00147 ((navigator)->ops->visited(navigator, env))
00148
00149 #define AXIOM_NAVIGATOR_NEXT(navigator, env) \
00150 ((navigator)->ops->next(navigator, env))
00151
00154 #ifdef __cplusplus
00155 }
00156 #endif
00157
00158 #endif