treetrie-2015/route.h

60 lines
2.1 KiB
C

#ifndef ROUTE_H_c2d88c54_f18d_4b71_9fce_5d43c0723360
#define ROUTE_H_c2d88c54_f18d_4b71_9fce_5d43c0723360
/* Sticking to odd-numbered constants, since the plan is for most
bindings to use odd-numbered atoms for immediates and even-numbered
atoms for heap-allocated complex values. TODO: make this a proper
part of the interface? */
#define TT_WILD ((tt_atom_t) -1) /* Wildcard */
#define TT_BOS ((tt_atom_t) -3) /* Beginning of sequence */
#define TT_EOS ((tt_atom_t) -5) /* End of sequence */
#define TT_BOC ((tt_atom_t) -7) /* Beginning of capture */
#define TT_EOC ((tt_atom_t) -9) /* End of capture */
/* N.B. Returns a tt_grab'd result. */
extern tt_node_ptr_t tt_trie_combine(tt_arena_t *a,
tt_node_ptr_t r1,
tt_node_ptr_t r2,
int left_empty_keep,
int right_empty_keep,
int left_base_keep,
int right_base_keep,
void *f_context,
/* Should return a tt_grab'd result. */
tt_node_ptr_t (*f)(void *f_context,
tt_node_ptr_t r1,
tt_node_ptr_t r2));
/* N.B. Returns a tt_grab'd result. */
extern tt_node_ptr_t tt_trie_union_map(tt_arena_t *a, tt_node_ptr_t r1, tt_node_ptr_t r2);
extern tt_node_ptr_t tt_trie_union_set(tt_arena_t *a, tt_node_ptr_t r1, tt_node_ptr_t r2);
extern tt_node_ptr_t tt_trie_subtract_set(tt_arena_t *a, tt_node_ptr_t r1, tt_node_ptr_t r2);
/* ungrab'd */
extern tt_node_ptr_t tt_trie_step(tt_arena_t *a, tt_node_ptr_t r, tt_atom_t key);
/* ungrab'd */
extern tt_node_ptr_t tt_trie_relabel(tt_arena_t *a,
tt_node_ptr_t r,
void *f_context,
tt_node_ptr_t (*f)(void *f_context,
tt_node_ptr_t oldlabel));
extern tt_node_ptr_t tt_trie_relabel_const(tt_arena_t *a, tt_node_ptr_t r, tt_node_ptr_t newlabel);
/* These return ungrab'd */
extern tt_node_ptr_t tt_begin_path(tt_arena_t *a, tt_node_ptr_t ok_dict);
extern tt_node_ptr_t tt_prepend_path(tt_arena_t *a, tt_atom_t tok, tt_node_ptr_t tail);
extern void tt_dump_routingtable(tt_arena_t *a, tt_node_ptr_t r, int initial_indent);
// TODO move to the right place
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif