00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef AXIS2_LINKED_LIST_H
00018 #define AXIS2_LINKED_LIST_H
00019
00025 #include <axis2_utils_defines.h>
00026 #include <axis2_env.h>
00027
00028 #ifdef __cplusplus
00029 extern "C"
00030 {
00031 #endif
00032
00033 typedef struct axis2_linked_list_s axis2_linked_list_t;
00034 typedef struct axis2_linked_list_ops_s axis2_linked_list_ops_t;
00035
00045 typedef struct entry_s
00046 {
00048 void *data;
00049
00051 struct entry_s *next;
00052
00054 struct entry_s *previous;
00055
00056 } entry_t;
00057
00061 struct axis2_linked_list_ops_s
00062 {
00063
00064 axis2_status_t (AXIS2_CALL *
00065 free) (axis2_linked_list_t *linked_list,
00066 const axis2_env_t *env);
00067
00080 entry_t * (AXIS2_CALL *
00081 get_entry)(axis2_linked_list_t *linked_list,
00082 const axis2_env_t *env,
00083 int n);
00084
00091 axis2_status_t (AXIS2_CALL *
00092 remove_entry)(axis2_linked_list_t *linked_list,
00093 const axis2_env_t *env,
00094 entry_t *e);
00095
00096
00102 axis2_bool_t (AXIS2_CALL *
00103 check_bounds_inclusive)(axis2_linked_list_t *linked_list,
00104 const axis2_env_t *env,
00105 int index);
00106
00112 axis2_bool_t (AXIS2_CALL *
00113 check_bounds_exclusive)(axis2_linked_list_t *linked_list,
00114 const axis2_env_t *env,
00115 int index);
00116
00122 void * (AXIS2_CALL *
00123 get_first)(axis2_linked_list_t *linked_list,
00124 const axis2_env_t *env);
00125
00131 void * (AXIS2_CALL *
00132 get_last)(axis2_linked_list_t *linked_list,
00133 const axis2_env_t *env);
00134
00140 void * (AXIS2_CALL *
00141 remove_first)(axis2_linked_list_t *linked_list,
00142 const axis2_env_t *env);
00143
00149 void * (AXIS2_CALL *
00150 remove_last)(axis2_linked_list_t *linked_list,
00151 const axis2_env_t *env);
00152
00158 axis2_status_t (AXIS2_CALL *
00159 add_first) (axis2_linked_list_t *linked_list,
00160 const axis2_env_t *env,
00161 void *o);
00162
00168 axis2_status_t (AXIS2_CALL *
00169 add_last) (axis2_linked_list_t *linked_list,
00170 const axis2_env_t *env,
00171 void *o);
00172
00180 axis2_bool_t (AXIS2_CALL *
00181 contains) (axis2_linked_list_t *linked_list,
00182 const axis2_env_t *env,
00183 void *o);
00184
00190 int (AXIS2_CALL *
00191 size) (axis2_linked_list_t *linked_list,
00192 const axis2_env_t *env);
00193
00200 axis2_bool_t (AXIS2_CALL *
00201 add) (axis2_linked_list_t *linked_list,
00202 const axis2_env_t *env,
00203 void *o);
00204
00212 axis2_bool_t (AXIS2_CALL *
00213 remove) (axis2_linked_list_t *linked_list,
00214 const axis2_env_t *env,
00215 void *o);
00216
00220 axis2_status_t (AXIS2_CALL *
00221 clear) (axis2_linked_list_t *linked_list,
00222 const axis2_env_t *env);
00223
00230 void * (AXIS2_CALL *
00231 get) (axis2_linked_list_t *linked_list,
00232 const axis2_env_t *env,
00233 int index);
00234
00242 void * (AXIS2_CALL *
00243 set) (axis2_linked_list_t *linked_list,
00244 const axis2_env_t *env,
00245 int index, void *o);
00246
00253 axis2_status_t (AXIS2_CALL *
00254 add_at_index) (axis2_linked_list_t *linked_list,
00255 const axis2_env_t *env,
00256 int index,
00257 void *o);
00258
00265 void * (AXIS2_CALL *
00266 remove_at_index) (axis2_linked_list_t *linked_list,
00267 const axis2_env_t *env,
00268 int index);
00269
00276 int (AXIS2_CALL *
00277 index_of)(axis2_linked_list_t *linked_list,
00278 const axis2_env_t *env,
00279 void *o);
00280
00287 int (AXIS2_CALL *
00288 last_index_of) (axis2_linked_list_t *linked_list,
00289 const axis2_env_t *env,
00290 void *o);
00291
00297 void ** (AXIS2_CALL *
00298 to_array) (axis2_linked_list_t *linked_list,
00299 const axis2_env_t *env);
00300
00301 };
00302
00307 struct axis2_linked_list_s
00308 {
00310 axis2_linked_list_ops_t *ops;
00311 };
00312
00316 AXIS2_EXTERN axis2_linked_list_t* AXIS2_CALL axis2_linked_list_create(const axis2_env_t *env);
00317
00318 #define AXIS2_LINKED_LIST_FREE(linked_list, env) \
00319 ((linked_list)->ops->free(linked_list, env))
00320
00321 #define AXIS2_LINKED_LIST_GET_ENTRY(linked_list, env, n) \
00322 ((linked_list)->ops->get_entry(linked_list, env, n))
00323
00324 #define AXIS2_LINKED_LIST_REMOVE_ENTRY(linked_list, env, e) \
00325 ((linked_list)->ops->remove_entry(linked_list, env, e))
00326
00327 #define AXIS2_LINKED_LIST_CHECK_BOUNDS_INCLUSIVE(linked_list, env, index) \
00328 ((linked_list)->ops->check_bounds_inclusive(linked_list, env, index))
00329
00330 #define AXIS2_LINKED_LIST_CHECK_BOUNDS_EXCLUSIVE(linked_list, env, index) \
00331 ((linked_list)->ops->check_bounds_exclusive(linked_list, env, index))
00332
00333 #define AXIS2_LINKED_LIST_GET_FIRST(linked_list, env) \
00334 ((linked_list)->ops->get_first(linked_list, env))
00335
00336 #define AXIS2_LINKED_LIST_GET_LAST(linked_list, env) \
00337 ((linked_list)->ops->get_last(linked_list, env))
00338
00339 #define AXIS2_LINKED_LIST_REMOVE_FIRST(linked_list, env) \
00340 ((linked_list)->ops->remove_first(linked_list, env))
00341
00342 #define AXIS2_LINKED_LIST_REMOVE_LAST(linked_list, env) \
00343 ((linked_list)->ops->remove_last(linked_list, env))
00344
00345 #define AXIS2_LINKED_LIST_ADD_FIRST(linked_list, env, o) \
00346 ((linked_list)->ops->add_first(linked_list, env, o))
00347
00348 #define AXIS2_LINKED_LIST_ADD_LAST(linked_list, env, o) \
00349 ((linked_list)->ops->add_last(linked_list, env, o))
00350
00351 #define AXIS2_LINKED_LIST_CONTAINS(linked_list, env, o) \
00352 ((linked_list)->ops->contains(linked_list, env, o))
00353
00354 #define AXIS2_LINKED_LIST_SIZE(linked_list, env) \
00355 ((linked_list)->ops->size(linked_list, env))
00356
00357 #define AXIS2_LINKED_LIST_ADD(linked_list, env, o) \
00358 ((linked_list)->ops->add(linked_list, env, o))
00359
00360 #define AXIS2_LINKED_LIST_REMOVE(linked_list, env, o) \
00361 ((linked_list)->ops->remove(linked_list, env, o))
00362
00363 #define AXIS2_LINKED_LIST_CLEAR(linked_list, env) \
00364 ((linked_list)->ops->clear(linked_list, env, index))
00365
00366 #define AXIS2_LINKED_LIST_GET(linked_list, env, index) \
00367 ((linked_list)->ops->get(linked_list, env, index))
00368
00369 #define AXIS2_LINKED_LIST_SET(linked_list, env, index, o) \
00370 ((linked_list)->ops->set(linked_list, env, index, o))
00371
00372 #define AXIS2_LINKED_LIST_ADD_AT_INDEX(linked_list, env, index, o) \
00373 ((linked_list)->ops->add_at_index(linked_list, env, index, o))
00374
00375 #define AXIS2_LINKED_LIST_REMOVE_AT_INDEX(linked_list, env, index) \
00376 ((linked_list)->ops->remove_at_index(linked_list, env, index))
00377
00378 #define AXIS2_LINKED_LIST_INDEX_OF(linked_list, env, o) \
00379 ((linked_list)->ops->index_of(linked_list, env, o))
00380
00381 #define AXIS2_LINKED_LIST_LAST_INDEX_OF(linked_list, env, o) \
00382 ((linked_list)->ops->last_index_of(linked_list, env, o))
00383
00384 #define AXIS2_LINKED_LIST_TO_ARRAY(linked_list, env) \
00385 ((linked_list)->ops->to_array(linked_list, env))
00386
00389 #ifdef __cplusplus
00390 }
00391 #endif
00392
00393 #endif