axis2_linked_list.h

Go to the documentation of this file.
00001 /*
00002  * Copyright 2004,2005 The Apache Software Foundation.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
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; /* struct entry */
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    /* AXIS2_LINKED_LIST_H */

Generated on Tue Oct 3 18:21:09 2006 for Axis2/C by  doxygen 1.4.7