hash
[utilities]


Defines

#define AXIS2_HASH_KEY_STRING   (unsigned int)(-1)

Typedefs

typedef struct
axutil_hash_t 
axutil_hash_t
typedef struct
axutil_hash_index_t 
axutil_hash_index_t
typedef unsigned int(* axutil_hashfunc_t )(const char *key, axis2_ssize_t *klen)

Functions

unsigned int axutil_hashfunc_default (const char *key, axis2_ssize_t *klen)
AXIS2_EXTERN
axutil_hash_t
axutil_hash_make (const axutil_env_t *env)
AXIS2_EXTERN
axutil_hash_t
axutil_hash_make_custom (const axutil_env_t *env, axutil_hashfunc_t hash_func)
AXIS2_EXTERN
axutil_hash_t
axutil_hash_copy (const axutil_hash_t *ht, const axutil_env_t *env)
AXIS2_EXTERN void axutil_hash_set (axutil_hash_t *ht, const void *key, axis2_ssize_t klen, const void *val)
AXIS2_EXTERN void * axutil_hash_get (axutil_hash_t *ht, const void *key, axis2_ssize_t klen)
AXIS2_EXTERN
axutil_hash_index_t
axutil_hash_first (axutil_hash_t *ht, const axutil_env_t *env)
AXIS2_EXTERN
axutil_hash_index_t
axutil_hash_next (const axutil_env_t *env, axutil_hash_index_t *hi)
AXIS2_EXTERN void axutil_hash_this (axutil_hash_index_t *hi, const void **key, axis2_ssize_t *klen, void **val)
AXIS2_EXTERN unsigned int axutil_hash_count (axutil_hash_t *ht)
AXIS2_EXTERN
axutil_hash_t
axutil_hash_overlay (const axutil_hash_t *overlay, const axutil_env_t *env, const axutil_hash_t *base)
AXIS2_EXTERN
axutil_hash_t
axutil_hash_merge (const axutil_hash_t *h1, const axutil_env_t *env, const axutil_hash_t *h2, void *(*merger)(const axutil_env_t *env, const void *key, axis2_ssize_t klen, const void *h1_val, const void *h2_val, const void *data), const void *data)
AXIS2_EXTERN axis2_bool_t axutil_hash_contains_key (axutil_hash_t *ht, const axutil_env_t *env, const axis2_char_t *key)
AXIS2_EXTERN void axutil_hash_free (axutil_hash_t *ht, const axutil_env_t *env)
AXIS2_EXTERN void axutil_hash_free_void_arg (void *ht_void, const axutil_env_t *env)
AXIS2_EXTERN void axutil_hash_set_env (axutil_hash_t *ht, const axutil_env_t *env)

Define Documentation

#define AXIS2_HASH_KEY_STRING   (unsigned int)(-1)

When passing a key to axutil_hash_set or axutil_hash_get, this value can be passed to indicate a string-valued key, and have axutil_hash compute the length automatically.

Remarks:
axutil_hash will use strlen(key) for the length. The NUL terminator is not included in the hash value (why throw a constant in?). Since the hash table merely references the provided key (rather than copying it), axutil_hash_this() will return the NUL-term'd key.


Typedef Documentation

typedef struct axutil_hash_index_t axutil_hash_index_t

Abstract type for scanning hash tables.

typedef struct axutil_hash_t axutil_hash_t

Abstract type for hash tables.

typedef unsigned int( * axutil_hashfunc_t)(const char *key, axis2_ssize_t *klen)

Callback functions for calculating hash values.

Parameters:
key The key.
klen The length of the key, or AXIS2_HASH_KEY_STRING to use the string length. If AXIS2_HASH_KEY_STRING then returns the actual key length.


Function Documentation

AXIS2_EXTERN axis2_bool_t axutil_hash_contains_key ( axutil_hash_t ht,
const axutil_env_t env,
const axis2_char_t *  key 
)

Query whether the hash table provided as parameter contains the key provided as parameter.

Parameters:
ht hash table to be queried for key
Returns:
return whether hash table contains key

AXIS2_EXTERN axutil_hash_t* axutil_hash_copy ( const axutil_hash_t ht,
const axutil_env_t env 
)

Make a copy of a hash table

Parameters:
ht The hash table to clone
env The environment from which to allocate the new hash table
Returns:
The hash table just created
Remarks:
Makes a shallow copy

AXIS2_EXTERN unsigned int axutil_hash_count ( axutil_hash_t ht  ) 

Get the number of key/value pairs in the hash table.

Parameters:
ht The hash table
Returns:
The number of key/value pairs in the hash table.

AXIS2_EXTERN axutil_hash_index_t* axutil_hash_first ( axutil_hash_t ht,
const axutil_env_t env 
)

 int sum_values(const axutil_env_t *env, axutil_hash_t *ht)
 {
     axutil_hash_index_t *hi;
     void *val;
     int sum = 0;
     for (hi = axutil_hash_first(p, ht); hi; hi = axutil_hash_next(p, hi)) {
         axutil_hash_this(hi, NULL, NULL, &val);
         sum += *(int *)val;
     }
     return sum;
 }
 

AXIS2_EXTERN void axutil_hash_free ( axutil_hash_t ht,
const axutil_env_t env 
)

Parameters:
ht hash table to be freed
env The environment to use for hash table
Returns:
return status code

AXIS2_EXTERN void axutil_hash_free_void_arg ( void *  ht_void,
const axutil_env_t env 
)

Free a hash table with hash table given as void

Parameters:
ht hash table to be freed as a void *
env The environment to use for hash table
Returns:
return status code

AXIS2_EXTERN void* axutil_hash_get ( axutil_hash_t ht,
const void *  key,
axis2_ssize_t  klen 
)

Look up the value associated with a key in a hash table.

Parameters:
ht The hash table
key Pointer to the key
klen Length of the key. Can be AXIS2_HASH_KEY_STRING to use the string length.
Returns:
Returns NULL if the key is not present.

AXIS2_EXTERN axutil_hash_t* axutil_hash_make ( const axutil_env_t env  ) 

Create a hash table.

Parameters:
env The environment to allocate the hash table out of
Returns:
The hash table just created

AXIS2_EXTERN axutil_hash_t* axutil_hash_make_custom ( const axutil_env_t env,
axutil_hashfunc_t  hash_func 
)

Create a hash table with a custom hash function

Parameters:
env The environment to allocate the hash table out of
hash_func A custom hash function.
Returns:
The hash table just created

AXIS2_EXTERN axutil_hash_t* axutil_hash_merge ( const axutil_hash_t h1,
const axutil_env_t env,
const axutil_hash_t h2,
void *(*)(const axutil_env_t *env, const void *key, axis2_ssize_t klen, const void *h1_val, const void *h2_val, const void *data)  merger,
const void *  data 
)

Merge two hash tables into one new hash table. If the same key is present in both tables, call the supplied merge function to produce a merged value for the key in the new table. Both hash tables must use the same hash function.

Parameters:
h1 The first of the tables to merge
p The environment to use for the new hash table
h2 The second of the tables to merge
merger A callback function to merge values, or NULL to make values from h1 override values from h2 (same semantics as axutil_hash_overlay())
data Client data to pass to the merger function
Returns:
A new hash table containing all of the data from the two passed in

AXIS2_EXTERN axutil_hash_index_t* axutil_hash_next ( const axutil_env_t env,
axutil_hash_index_t hi 
)

Continue iterating over the entries in a hash table.

Parameters:
hi The iteration state
Returns:
a pointer to the updated iteration state. NULL if there are no more entries.

AXIS2_EXTERN axutil_hash_t* axutil_hash_overlay ( const axutil_hash_t overlay,
const axutil_env_t env,
const axutil_hash_t base 
)

Merge two hash tables into one new hash table. The values of the overlay hash override the values of the base if both have the same key. Both hash tables must use the same hash function.

Parameters:
overlay The table to add to the initial table
p The environment to use for the new hash table
base The table that represents the initial values of the new table
Returns:
A new hash table containing all of the data from the two passed in

AXIS2_EXTERN void axutil_hash_set ( axutil_hash_t ht,
const void *  key,
axis2_ssize_t  klen,
const void *  val 
)

Associate a value with a key in a hash table.

Parameters:
ht The hash table
key Pointer to the key
klen Length of the key. Can be AXIS2_HASH_KEY_STRING to use the string length.
val Value to associate with the key
Remarks:
If the value is NULL the hash entry is deleted.

AXIS2_EXTERN void axutil_hash_this ( axutil_hash_index_t hi,
const void **  key,
axis2_ssize_t *  klen,
void **  val 
)

Get the current entry's details from the iteration state.

Parameters:
hi The iteration state
key Return pointer for the pointer to the key.
klen Return pointer for the key length.
val Return pointer for the associated value.
Remarks:
The return pointers should point to a variable that will be set to the corresponding data, or they may be NULL if the data isn't interesting.

unsigned int axutil_hashfunc_default ( const char *  key,
axis2_ssize_t *  klen 
)

The default hash function.


Generated on Fri Apr 17 11:49:46 2009 for Axis2/C by  doxygen 1.5.3