+ forks[fork_pos] = last_key;
+
+ const int children_len = trie->entries[id].children_len;
+ for (int i = 0 ; i < children_len ; ++i) {
+ int child = trie->entries[id].children_offset + i;
+ if (forks[i] - 1 > first_key) {
+ trie_compile_aux(trie, child, first_key, forks[i], offset, 1);
+ }
+ first_key = forks[i];
+ }
+}
+
+static inline void trie_cleanup_build_data(trie_t *trie)
+{
+ for (int i = 0 ; i < trie->keys_len ; ++i) {
+ p_delete(&trie->keys[i]);
+ }
+ p_delete(&trie->keys);
+}
+
+static inline void trie_shrink(trie_t *trie)
+{
+}
+
+static inline void trie_lock(trie_t *trie)
+{
+}
+
+typedef char *str_t;
+
+void trie_compile(trie_t *trie, bool memlock)
+{
+ {
+# define QSORT_TYPE str_t
+# define QSORT_BASE trie->keys
+# define QSORT_NELT trie->keys_len
+# define QSORT_LT(a,b) strcmp(*a, *b) < 0
+# include "qsort.c"
+ }
+
+ trie_grow(trie, trie->keys_len);
+ trie_compile_aux(trie, trie_add_leaf(trie, trie->keys[0]),
+ 0, trie->keys_len, 0, 0);
+ trie_cleanup_build_data(trie);
+ trie_shrink(trie);
+ if (memlock) {
+ trie_lock(trie);
+ }