piojo-0.9
Piojo List

Functions

piojo_list_t * piojo_list_alloc (void)
 
piojo_list_t * piojo_list_alloc_s (size_t esize)
 
piojo_list_t * piojo_list_alloc_cb (size_t esize, piojo_alloc_if allocator)
 
piojo_list_t * piojo_list_copy (const piojo_list_t *list)
 
void piojo_list_free (const piojo_list_t *list)
 
void piojo_list_clear (piojo_list_t *list)
 
size_t piojo_list_size (const piojo_list_t *list)
 
piojo_list_node_t * piojo_list_insert (const void *data, piojo_list_node_t *next, piojo_list_t *list)
 
piojo_list_node_t * piojo_list_set (const void *data, piojo_list_node_t *node, piojo_list_t *list)
 
piojo_list_node_t * piojo_list_prepend (const void *data, piojo_list_t *list)
 
piojo_list_node_t * piojo_list_append (const void *data, piojo_list_t *list)
 
piojo_list_node_t * piojo_list_delete (const piojo_list_node_t *node, piojo_list_t *list)
 
piojo_list_node_t * piojo_list_first (const piojo_list_t *list)
 
piojo_list_node_t * piojo_list_last (const piojo_list_t *list)
 
piojo_list_node_t * piojo_list_next (const piojo_list_node_t *node)
 
piojo_list_node_t * piojo_list_prev (const piojo_list_node_t *node)
 
void * piojo_list_entry (const piojo_list_node_t *node)
 
piojo_skiplist_t * piojo_skiplist_alloc_i32k (size_t evsize)
 
piojo_skiplist_t * piojo_skiplist_alloc_i64k (size_t evsize)
 
piojo_skiplist_t * piojo_skiplist_alloc_sizk (size_t evsize)
 
piojo_skiplist_t * piojo_skiplist_alloc_cb_i32k (size_t evsize, piojo_alloc_if allocator)
 
piojo_skiplist_t * piojo_skiplist_alloc_cb_i64k (size_t evsize, piojo_alloc_if allocator)
 
piojo_skiplist_t * piojo_skiplist_alloc_cb_sizk (size_t evsize, piojo_alloc_if allocator)
 
piojo_skiplist_t * piojo_skiplist_alloc_cmp (size_t evsize, piojo_cmp_cb keycmp, size_t eksize)
 
piojo_skiplist_t * piojo_skiplist_alloc_cb_cmp (size_t evsize, piojo_cmp_cb keycmp, size_t eksize, piojo_alloc_if allocator)
 
piojo_skiplist_t * piojo_skiplist_copy (const piojo_skiplist_t *list)
 
void piojo_skiplist_free (const piojo_skiplist_t *list)
 
void piojo_skiplist_clear (piojo_skiplist_t *list)
 
size_t piojo_skiplist_size (const piojo_skiplist_t *list)
 
bool piojo_skiplist_insert (const void *key, const void *data, piojo_skiplist_t *list)
 
bool piojo_skiplist_set (const void *key, const void *data, piojo_skiplist_t *list)
 
void * piojo_skiplist_search (const void *key, const piojo_skiplist_t *list)
 
bool piojo_skiplist_delete (const void *key, piojo_skiplist_t *list)
 
const void * piojo_skiplist_first (const piojo_skiplist_t *list, void **data)
 
const void * piojo_skiplist_last (const piojo_skiplist_t *list, void **data)
 
const void * piojo_skiplist_next (const void *key, const piojo_skiplist_t *list, void **data)
 
const void * piojo_skiplist_prev (const void *key, const piojo_skiplist_t *list, void **data)
 

Variables

const size_t piojo_list_sizeof
 
const size_t piojo_skiplist_sizeof
 

Detailed Description

Piojo List implementation.

Piojo Skip List implementation.

Function Documentation

◆ piojo_list_alloc()

piojo_list_t* piojo_list_alloc ( void  )

Allocates a new list. Uses default allocator and entry size of int.

Returns
New list.

◆ piojo_list_alloc_cb()

piojo_list_t* piojo_list_alloc_cb ( size_t  esize,
piojo_alloc_if  allocator 
)

Allocates a new list.

Parameters
[in]esizeEntry size in bytes.
[in]allocatorAllocator to be used.
Returns
New list.

◆ piojo_list_alloc_s()

piojo_list_t* piojo_list_alloc_s ( size_t  esize)

Allocates a new list. Uses default allocator.

Parameters
[in]esizeEntry size in bytes.
Returns
New list.

◆ piojo_list_append()

piojo_list_node_t* piojo_list_append ( const void *  data,
piojo_list_t *  list 
)

Inserts a new entry at the end of list.

Parameters
[in]dataEntry value.
[out]listList being modified.
Returns
Node of inserted entry.

◆ piojo_list_clear()

void piojo_list_clear ( piojo_list_t *  list)

Deletes all entries in list.

Parameters
[out]listList being cleared.

◆ piojo_list_copy()

piojo_list_t* piojo_list_copy ( const piojo_list_t *  list)

Copies list and all its entries.

Parameters
[in]listList being copied.
Returns
New list.

◆ piojo_list_delete()

piojo_list_node_t* piojo_list_delete ( const piojo_list_node_t *  node,
piojo_list_t *  list 
)

Deletes a node.

Parameters
[in]nodeNode of the entry being deleted.
[out]listNon-empty list.
Returns
Next node, NULL if list is now empty.

◆ piojo_list_entry()

void* piojo_list_entry ( const piojo_list_node_t *  node)

Reads entry from node.

Parameters
[in]node
Returns
Entry value.

◆ piojo_list_first()

piojo_list_node_t* piojo_list_first ( const piojo_list_t *  list)

Reads the first node in list.

Parameters
[in]list
Returns
First node, NULL if list is empty.

◆ piojo_list_free()

void piojo_list_free ( const piojo_list_t *  list)

Frees list and all its entries.

Parameters
[in]listList being freed.

◆ piojo_list_insert()

piojo_list_node_t* piojo_list_insert ( const void *  data,
piojo_list_node_t *  next,
piojo_list_t *  list 
)

Inserts a new entry.

Parameters
[in]dataEntry value.
[in]nextNode following the entry being inserted.
[out]listList being modified.
Returns
Node of inserted entry.

◆ piojo_list_last()

piojo_list_node_t* piojo_list_last ( const piojo_list_t *  list)

Reads the last node in list.

Parameters
[in]list
Returns
Last node, NULL if list is empty.

◆ piojo_list_next()

piojo_list_node_t* piojo_list_next ( const piojo_list_node_t *  node)

Reads the next node.

Parameters
[in]node
Returns
Next node, NULL if node is the last one.

◆ piojo_list_prepend()

piojo_list_node_t* piojo_list_prepend ( const void *  data,
piojo_list_t *  list 
)

Inserts a new entry at the beginning of list.

Parameters
[in]dataEntry value.
[out]listList being modified.
Returns
Node of inserted entry.

◆ piojo_list_prev()

piojo_list_node_t* piojo_list_prev ( const piojo_list_node_t *  node)

Reads the previous node.

Parameters
[in]node
Returns
Previous node, NULL if node is the first one.

◆ piojo_list_set()

piojo_list_node_t* piojo_list_set ( const void *  data,
piojo_list_node_t *  node,
piojo_list_t *  list 
)

Replaces an entry.

Parameters
[in]dataEntry value.
[in]nodeNode being replaced.
[out]listList being modified.
Returns
node.

◆ piojo_list_size()

size_t piojo_list_size ( const piojo_list_t *  list)

Returns number of entries.

Parameters
[in]list
Returns
Number of entries in list.

◆ piojo_skiplist_alloc_cb_cmp()

piojo_skiplist_t* piojo_skiplist_alloc_cb_cmp ( size_t  evsize,
piojo_cmp_cb  keycmp,
size_t  eksize,
piojo_alloc_if  allocator 
)

Allocates a new list.

Parameters
[in]evsizeEntry size in bytes.
[in]keycmpEntry key comparison function.
[in]eksizeEntry key size.
[in]allocatorAllocator to be used.
Returns
New list.

◆ piojo_skiplist_alloc_cb_i32k()

piojo_skiplist_t* piojo_skiplist_alloc_cb_i32k ( size_t  evsize,
piojo_alloc_if  allocator 
)

Allocates a new list. Uses key size of int32_t.

Parameters
[in]evsizeEntry value size in bytes.
[in]allocatorAllocator to be used.
Returns
New list.

◆ piojo_skiplist_alloc_cb_i64k()

piojo_skiplist_t* piojo_skiplist_alloc_cb_i64k ( size_t  evsize,
piojo_alloc_if  allocator 
)

Allocates a new list. Uses key size of int64_t.

Parameters
[in]evsizeEntry value size in bytes.
[in]allocatorAllocator to be used.
Returns
New list.

◆ piojo_skiplist_alloc_cb_sizk()

piojo_skiplist_t* piojo_skiplist_alloc_cb_sizk ( size_t  evsize,
piojo_alloc_if  allocator 
)

Allocates a new list. Uses key size of size_t.

Parameters
[in]evsizeEntry value size in bytes.
[in]allocatorAllocator to be used.
Returns
New list.

◆ piojo_skiplist_alloc_cmp()

piojo_skiplist_t* piojo_skiplist_alloc_cmp ( size_t  evsize,
piojo_cmp_cb  keycmp,
size_t  eksize 
)

Allocates a new list.

Parameters
[in]evsizeEntry size in bytes.
[in]keycmpEntry key comparison function.
[in]eksizeEntry key size.
Returns
New list.

◆ piojo_skiplist_alloc_i32k()

piojo_skiplist_t* piojo_skiplist_alloc_i32k ( size_t  evsize)

Allocates a new list. Uses default allocator and key size of int32_t.

Parameters
[in]evsizeEntry value size in bytes.
Returns
New list.

◆ piojo_skiplist_alloc_i64k()

piojo_skiplist_t* piojo_skiplist_alloc_i64k ( size_t  evsize)

Allocates a new list. Uses default allocator and key size of int64_t.

Parameters
[in]evsizeEntry value size in bytes.
Returns
New list.

◆ piojo_skiplist_alloc_sizk()

piojo_skiplist_t* piojo_skiplist_alloc_sizk ( size_t  evsize)

Allocates a new list. Uses default allocator and key size of size_t.

Parameters
[in]evsizeEntry value size in bytes.
Returns
New list.

◆ piojo_skiplist_clear()

void piojo_skiplist_clear ( piojo_skiplist_t *  list)

Deletes all entries in list.

Parameters
[out]listList being cleared.

◆ piojo_skiplist_copy()

piojo_skiplist_t* piojo_skiplist_copy ( const piojo_skiplist_t *  list)

Copies list and all its entries.

Parameters
[in]listList being copied.
Returns
New list.

◆ piojo_skiplist_delete()

bool piojo_skiplist_delete ( const void *  key,
piojo_skiplist_t *  list 
)

Deletes an entry by key.

Parameters
[in]keyEntry key.
[out]list
Returns
TRUE if deleted, FALSE if key doesn't exist.

◆ piojo_skiplist_first()

const void* piojo_skiplist_first ( const piojo_skiplist_t *  list,
void **  data 
)

Reads the first key in list (order given by keycmp function).

Parameters
[in]list
[out]dataEntry value, can be NULL.
Returns
first key or NULL if list is empty.

◆ piojo_skiplist_free()

void piojo_skiplist_free ( const piojo_skiplist_t *  list)

Frees list and all its entries.

Parameters
[in]listList being freed.

◆ piojo_skiplist_insert()

bool piojo_skiplist_insert ( const void *  key,
const void *  data,
piojo_skiplist_t *  list 
)

Inserts a new entry. If data is NULL, the value is replaced with TRUE (useful for sets).

Parameters
[in]keyEntry key.
[in]dataEntry value.
[out]listList being modified.
Returns
TRUE if inserted, FALSE if key is duplicate.

◆ piojo_skiplist_last()

const void* piojo_skiplist_last ( const piojo_skiplist_t *  list,
void **  data 
)

Reads the last key in list (order given by keycmp function).

Parameters
[in]list
[out]dataEntry value, can be NULL.
Returns
last key or NULL if list is empty.

◆ piojo_skiplist_next()

const void* piojo_skiplist_next ( const void *  key,
const piojo_skiplist_t *  list,
void **  data 
)

Reads the next key (order given by keycmp function).

Parameters
[in]key
[in]list
[out]dataEntry value, can be NULL.
Returns
next key or NULL if key is the last one.

◆ piojo_skiplist_prev()

const void* piojo_skiplist_prev ( const void *  key,
const piojo_skiplist_t *  list,
void **  data 
)

Reads the previous key (order given by keycmp function).

Parameters
[in]key
[in]list
[out]dataEntry value, can be NULL.
Returns
previous key or NULL if key is the first one.

◆ piojo_skiplist_search()

void* piojo_skiplist_search ( const void *  key,
const piojo_skiplist_t *  list 
)

Searches an entry by key.

Parameters
[in]keyEntry key.
[in]list
Returns
Entry value or NULL if key doesn't exist.

◆ piojo_skiplist_set()

bool piojo_skiplist_set ( const void *  key,
const void *  data,
piojo_skiplist_t *  list 
)

Replaces or inserts an entry. If data is NULL, the value is replaced with TRUE (useful for sets).

Parameters
[in]keyEntry key.
[in]dataEntry value.
[out]listList being modified.
Returns
TRUE if key is new, FALSE otherwise.

◆ piojo_skiplist_size()

size_t piojo_skiplist_size ( const piojo_skiplist_t *  list)

Returns number of entries.

Parameters
[in]list
Returns
Number of entries in list.

Variable Documentation

◆ piojo_list_sizeof

const size_t piojo_list_sizeof

Size of list in bytes

◆ piojo_skiplist_sizeof

const size_t piojo_skiplist_sizeof

Size of list in bytes