XROAD
xroad_hash.h File Reference
#include "xroad_common_fwd.h"
#include "xroad_common_types.h"
#include <stdlib.h>
Include dependency graph for xroad_hash.h:

Go to the source code of this file.

Classes

struct  xroad_hash_va_args_t
 
struct  xroad_hash_ins_res_t
 

Macros

#define xroad_hash_create(...)
 
#define __xroad_hash_dtor__   __dtor__(xroad_hash_destructor)
 

Typedefs

typedef uint32_t(* xroad_hash_func_t) (const uint8_t *, uint32_t)
 
typedef int32_t(* xroad_hash_equal_func_t) (const void *, uint32_t, const void *, uint32_t)
 
typedef void(* xroad_hash_free_func_t) (void *, uint32_t, void *, uint32_t)
 

Functions

xroad_hash_txroad_hash_create_ex (uint32_t size, xroad_hash_func_t hash_func, xroad_hash_equal_func_t equal_func, xroad_hash_free_func_t free_func, xroad_mem_pool_t *pool)
 
void xroad_hash_destroy (xroad_hash_t *hash)
 
void xroad_hash_destructor (void *hash)
 
xroad_hash_ins_res_t xroad_hash_insert (xroad_hash_t *hash, const void *key, uint32_t key_size, const void *value, uint32_t value_size)
 
xroad_hash_entry_t * xroad_hash_find (xroad_hash_t *hash, const void *key, uint32_t key_size)
 
void xroad_hash_clear (xroad_hash_t *hash)
 
uint32_t xroad_hash_entry_get_value_size (const xroad_hash_entry_t *entry)
 
void * xroad_hash_entry_get_value (xroad_hash_entry_t *entry)
 
xroad_hash_entry_t * xroad_hash_entry_set_value (xroad_hash_entry_t *entry, const void *value, uint32_t value_size, xroad_hash_free_func_t free_func)
 
uint32_t xroad_hash_entry_get_key_size (const xroad_hash_entry_t *entry)
 
void * xroad_hash_entry_get_key (xroad_hash_entry_t *entry)
 
xroad_errno_t xroad_hash_entry_delete (xroad_hash_entry_t *entry, xroad_hash_free_func_t free_func)
 
xroad_hash_entry_t * xroad_hash_entry_delete_next (xroad_hash_entry_t *entry, xroad_hash_free_func_t free_func)
 
xroad_hash_entry_t * xroad_hash_get_first (xroad_hash_t *hash)
 
xroad_hash_entry_t * xroad_hash_get_next (xroad_hash_entry_t *entry)
 
xroad_errno_t xroad_hash_delete (xroad_hash_t *hash, const void *key, uint32_t key_size, xroad_hash_free_func_t free_func)
 
uint32_t xroad_hash_get_size (xroad_hash_t *hash)
 
xroad_list_txroad_hash_to_list (xroad_hash_t *hash)
 

Detailed Description

Macro Definition Documentation

◆ xroad_hash_create

#define xroad_hash_create (   ...)
Value:
({ \
xroad_hash_va_args_t args = {__VA_ARGS__}; \
xroad_hash_create_ex(args.size, args.hash, args.equal, args.dtor, args.pool); \
})

Typedef Documentation

◆ xroad_hash_equal_func_t

typedef int32_t(* xroad_hash_equal_func_t) (const void *, uint32_t, const void *, uint32_t)

equal function type

◆ xroad_hash_free_func_t

typedef void(* xroad_hash_free_func_t) (void *, uint32_t, void *, uint32_t)

hash entry free function

◆ xroad_hash_func_t

typedef uint32_t(* xroad_hash_func_t) (const uint8_t *, uint32_t)

hash function type

Function Documentation

◆ xroad_hash_clear()

void xroad_hash_clear ( xroad_hash_t hash)

delete all entries from hash table

Parameters
[in]hash- hash with deleted entry

◆ xroad_hash_create_ex()

xroad_hash_t* xroad_hash_create_ex ( uint32_t  size,
xroad_hash_func_t  hash_func,
xroad_hash_equal_func_t  equal_func,
xroad_hash_free_func_t  free_func,
xroad_mem_pool_t *  pool 
)

create new hash table

Parameters
[in]size- initial size of hash table
[in]hash_func- hash function, if NULL - default function is used
[in]equal_func- equality function, used for entry search. if NULL - default function is used
[in]free_func- destructor function. Can be NULL
[in]pool- memory pool if any. Can be NULL, so libc malloc/calloc will be used
Returns
pointer to new hash table, NULL - error

◆ xroad_hash_delete()

xroad_errno_t xroad_hash_delete ( xroad_hash_t hash,
const void *  key,
uint32_t  key_size,
xroad_hash_free_func_t  free_func 
)

delete entry from hash table

Parameters
[in]hash- hash table
[in]key- key to delete
[in]key_size- size of key
[in]free_func- func for destroying data, if NULL - no destroy performed
Returns
XROAD_OK - found&deleted, XROAD_ERROR_NOT_FOUND - entry with key not found

◆ xroad_hash_destroy()

void xroad_hash_destroy ( xroad_hash_t hash)

delete hash table and free all resources

Parameters
[in]hash- hash table to delete. If hash is NULL, nothing happened

◆ xroad_hash_entry_delete()

xroad_errno_t xroad_hash_entry_delete ( xroad_hash_entry_t *  entry,
xroad_hash_free_func_t  free_func 
)

delete entry and free all allocated resources

Parameters
[in]entry- entry to delete
[in]free_func- func for destroying data, if NULL - no destroy performed
Returns
XROAD_OK - deleted

◆ xroad_hash_entry_delete_next()

xroad_hash_entry_t* xroad_hash_entry_delete_next ( xroad_hash_entry_t *  entry,
xroad_hash_free_func_t  free_func 
)

delete entry, free all allocated resources and return next entry, if any

Parameters
[in]entry- entry to delete
[in]free_func- func for destroying data, if NULL - no destroy performed
Returns
next entry, if any

◆ xroad_hash_entry_get_key()

void* xroad_hash_entry_get_key ( xroad_hash_entry_t *  entry)

return entry key

Parameters
[in]entry- entry to explore
Returns
entry value

◆ xroad_hash_entry_get_key_size()

uint32_t xroad_hash_entry_get_key_size ( const xroad_hash_entry_t *  entry)

return entry key size

Parameters
[in]entry- entry to explore
Returns
entry size

◆ xroad_hash_entry_get_value()

void* xroad_hash_entry_get_value ( xroad_hash_entry_t *  entry)

return entry value

Parameters
[in]entry- entry to explore
Returns
entry value

◆ xroad_hash_entry_get_value_size()

uint32_t xroad_hash_entry_get_value_size ( const xroad_hash_entry_t *  entry)

return entry value size

Parameters
[in]entry- entry to explore
Returns
entry size

◆ xroad_hash_entry_set_value()

xroad_hash_entry_t* xroad_hash_entry_set_value ( xroad_hash_entry_t *  entry,
const void *  value,
uint32_t  value_size,
xroad_hash_free_func_t  free_func 
)

set entry value

Parameters
[in]entry- entry to set
[in]value- new value to set
[in]value_size- size of new value
[in]free_func- func for destroying previous value, if NULL - no destroy performed
Returns
entry. The addess may be changed, so use return value instead of param one

◆ xroad_hash_find()

xroad_hash_entry_t* xroad_hash_find ( xroad_hash_t hash,
const void *  key,
uint32_t  key_size 
)

find entry in hash table

Parameters
[in]hash- instance of hash table
[in]key- key to find
[in]key_size- size of key
Returns
entry or NULL if not found

◆ xroad_hash_get_first()

xroad_hash_entry_t* xroad_hash_get_first ( xroad_hash_t hash)

return first entry from hash

Parameters
[in]hash- hash with enries

◆ xroad_hash_get_next()

xroad_hash_entry_t* xroad_hash_get_next ( xroad_hash_entry_t *  entry)

return next entry from hash

Parameters
[in]entry- first entry, NULL - no more entries

◆ xroad_hash_get_size()

uint32_t xroad_hash_get_size ( xroad_hash_t hash)

return number of entries in hash

Parameters
[in]hash- hash table
Returns
number of entries in hash

◆ xroad_hash_insert()

xroad_hash_ins_res_t xroad_hash_insert ( xroad_hash_t hash,
const void *  key,
uint32_t  key_size,
const void *  value,
uint32_t  value_size 
)

insert new entry into table

Parameters
[in]hash- instance of hash table
[in]key- pointer to key data
[in]key_size- size of key data
[in]value- pointer to data
[in]value_size- size of data
Returns
result of insertion. entry - result of insertion or existing entry, errno - XROAD_OK - inserted, XROAD_ERROR_ALREADY_EXISTS - entry with the same key already exists

◆ xroad_hash_to_list()

xroad_list_t* xroad_hash_to_list ( xroad_hash_t hash)

convert hash structure to list

Parameters
[in]hash- hash to convert
Returns
new list structure