00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef AXUTIL_HASH_H
00020 #define AXUTIL_HASH_H
00021
00027 #include <axutil_utils_defines.h>
00028 #include <axutil_env.h>
00029
00030 #ifdef __cplusplus
00031 extern "C"
00032 {
00033 #endif
00034
00051 #define AXIS2_HASH_KEY_STRING (unsigned int)(-1)
00052
00056 typedef struct axutil_hash_t axutil_hash_t;
00057
00061 typedef struct axutil_hash_index_t axutil_hash_index_t;
00062
00069 typedef unsigned int(
00070 *axutil_hashfunc_t)(
00071 const char *key,
00072 axis2_ssize_t * klen);
00073
00077 unsigned int axutil_hashfunc_default(
00078 const char *key,
00079 axis2_ssize_t * klen);
00080
00086 AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
00087 axutil_hash_make(
00088 const axutil_env_t * env);
00089
00096 AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
00097 axutil_hash_make_custom(
00098 const axutil_env_t * env,
00099 axutil_hashfunc_t hash_func);
00100
00108 AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
00109 axutil_hash_copy(
00110 const axutil_hash_t * ht,
00111 const axutil_env_t * env);
00112
00121 AXIS2_EXTERN void AXIS2_CALL
00122 axutil_hash_set(
00123 axutil_hash_t * ht,
00124 const void *key,
00125 axis2_ssize_t klen,
00126 const void *val);
00127
00135 AXIS2_EXTERN void *AXIS2_CALL
00136 axutil_hash_get(
00137 axutil_hash_t * ht,
00138 const void *key,
00139 axis2_ssize_t klen);
00140
00170 AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL
00171 axutil_hash_first(
00172 axutil_hash_t * ht,
00173 const axutil_env_t * env);
00174
00181 AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL
00182 axutil_hash_next(
00183 const axutil_env_t * env,
00184 axutil_hash_index_t * hi);
00185
00195 AXIS2_EXTERN void AXIS2_CALL
00196 axutil_hash_this(
00197 axutil_hash_index_t * hi,
00198 const void **key,
00199 axis2_ssize_t * klen,
00200 void **val);
00201
00207 AXIS2_EXTERN unsigned int AXIS2_CALL
00208 axutil_hash_count(
00209 axutil_hash_t * ht);
00210
00220 AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
00221 axutil_hash_overlay(
00222 const axutil_hash_t * overlay,
00223 const axutil_env_t * env,
00224 const axutil_hash_t * base);
00225
00240 AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
00241 axutil_hash_merge(
00242 const axutil_hash_t * h1,
00243 const axutil_env_t * env,
00244 const axutil_hash_t * h2,
00245 void *(*merger)(const axutil_env_t * env,
00246 const void *key,
00247 axis2_ssize_t klen,
00248 const void *h1_val,
00249 const void *h2_val,
00250 const void *data),
00251 const void *data);
00252
00260 AXIS2_EXTERN axis2_bool_t AXIS2_CALL
00261 axutil_hash_contains_key(
00262 axutil_hash_t * ht,
00263 const axutil_env_t * env,
00264 const axis2_char_t * key);
00265
00273 AXIS2_EXTERN void AXIS2_CALL
00274 axutil_hash_free(
00275 axutil_hash_t * ht,
00276 const axutil_env_t * env);
00277
00285 AXIS2_EXTERN void AXIS2_CALL
00286 axutil_hash_free_void_arg(
00287 void *ht_void,
00288 const axutil_env_t * env);
00289
00290 AXIS2_EXTERN void AXIS2_CALL
00291 axutil_hash_set_env(
00292 axutil_hash_t * ht,
00293 const axutil_env_t * env);
00294
00297 #ifdef __cplusplus
00298 }
00299 #endif
00300
00301 #endif