#include "tommytypes.h"
Go to the source code of this file.
Classes | |
| struct | tommy_chain_struct |
Macros | |
| #define | TOMMY_CHAIN_BIT_MAX 32 |
Typedefs | |
| typedef struct tommy_chain_struct | tommy_chain |
Functions | |
| tommy_inline void | tommy_chain_splice (tommy_node *first_before, tommy_node *first_after, tommy_node *second_head, tommy_node *second_tail) |
| tommy_inline void | tommy_chain_concat (tommy_node *first_tail, tommy_node *second_head) |
| tommy_inline void | tommy_chain_merge (tommy_chain *first, tommy_chain *second, tommy_compare_func *cmp) |
| tommy_inline void | tommy_chain_merge_degenerated (tommy_chain *first, tommy_chain *second, tommy_compare_func *cmp) |
| tommy_inline void | tommy_chain_mergesort (tommy_chain *chain, tommy_compare_func *cmp) |
Chain of nodes. A chain of nodes is an abstraction used to implements complex list operations like sorting.
Do not use this directly. Use lists instead.
Definition in file tommychain.h.
| #define TOMMY_CHAIN_BIT_MAX 32 |
Max number of elements as a power of 2.
Definition at line 142 of file tommychain.h.
| typedef struct tommy_chain_struct tommy_chain |
Chain of nodes. A chain of nodes is a sequence of nodes with the following properties:
| tommy_inline void tommy_chain_concat | ( | tommy_node * | first_tail, |
| tommy_node * | second_head | ||
| ) |
Concats two chains.
Definition at line 74 of file tommychain.h.
| tommy_inline void tommy_chain_merge | ( | tommy_chain * | first, |
| tommy_chain * | second, | ||
| tommy_compare_func * | cmp | ||
| ) |
Merges two chains.
Definition at line 86 of file tommychain.h.
| tommy_inline void tommy_chain_merge_degenerated | ( | tommy_chain * | first, |
| tommy_chain * | second, | ||
| tommy_compare_func * | cmp | ||
| ) |
Merges two chains managing special degenerated cases. It's funtionally equivalent at tommy_chain_merge() but faster with already ordered chains.
Definition at line 119 of file tommychain.h.
| tommy_inline void tommy_chain_mergesort | ( | tommy_chain * | chain, |
| tommy_compare_func * | cmp | ||
| ) |
Sorts a chain. It's a stable merge sort using power of 2 buckets, with O(N*log(N)) complexity, similar at the one used in the SGI STL libraries and in the Linux Kernel, but faster on degenerated cases like already ordered lists.
SGI STL stl_list.h http://www.sgi.com/tech/stl/stl_list.h
Linux Kernel lib/list_sort.c http://lxr.linux.no/#linux+v2.6.36/lib/list_sort.c
Value stored inside the bit bucket. It's used to know which bucket is empty of full.
Definition at line 156 of file tommychain.h.
| tommy_inline void tommy_chain_splice | ( | tommy_node * | first_before, |
| tommy_node * | first_after, | ||
| tommy_node * | second_head, | ||
| tommy_node * | second_tail | ||
| ) |
Splices a chain in the middle of another chain.
Definition at line 60 of file tommychain.h.