Offset-Indexed TRIE’s

type ymo_trie_node_t

Typedef forward declarations for translation units that don’t need defs:

Definition
typedef struct ymo_trie_node ymo_trie_node_t;
struct ymo_trie_node

Node type for an uncompressed trie.

Definition
struct ymo_trie_node {
    struct ymo_trie_node* children[YMO_TRIE_NO_CHILDREN];
    size_t                index;
    size_t                value_id;
    unsigned char         value;
};
struct ymo_trie

Uncompressed trie type. Used to construct lookup tables, but not to perform lookups.

Definition
struct ymo_trie {
    ymo_trie_node_t* root;
    size_t           no_nodes;
    size_t           no_values;
};
struct ymo_oitrie_node

Compressed trie node type.

Definition
struct ymo_oitrie_node {
    uint8_t              flags;
    ymo_trie_id_t        hdr_id;
    ymo_oitrie_offset_t  offset;
    unsigned char        value; /* Char value at this node */
};
ymo_trie_t *ymo_trie_create(void)

Create an uncompressed trie.

void ymo_trie_free(ymo_trie_t *root)

Release an umcompressed trie.

ymo_status_t ymo_trie_add_string(ymo_trie_t *trie, const char *str_in)

Add a string to the trie.

ymo_trie_node_t *ymo_trie_node_create(void)

Create a node for an uncompressed trie.

void ymo_trie_node_free(ymo_trie_node_t *root)

Free an uncompressed child node and all it’s child nodes.

ymo_oitrie_t *ymo_oitrie_create(ymo_trie_t *trie)

Create a compressed trie from an uncomprssed trie.

Note

This is a destructive action. All the nodes in the input trie are freed.

size_t ymo_oitrie_sizeof(const ymo_oitrie_t *oitrie)

Return the total number of bytes consumed by the oitrie.

void ymo_oitrie_free(ymo_oitrie_t *oitrie)

Free a compressed trie.

ymo_status_t ymo_oitrie_get_id(int *hdr_id, const ymo_oitrie_t *restrict oitrie, register const char *restrict str_in)

Given an input string, return the string id.