to use subsumptive checks rather than variant.
Reorganized the subsumption-based routines and expanded their
functionality and versatility. Similar-style variant-based routines
are also included. Their organization is divided along two lines.
One is a division by functionality: lookup, insert, and search
(check/insert), where the latter routines employ the other primitive
operations of lookup and insert. The second line provides abstraction
within each class of routine. Using the lower-level routines,
trie-manipulating operations with special requirements can be built,
thus limiting the duplication of trie code. Note that although these
routines could serve to replace the one-use trie functions employed by
XSB, their use has been restricted to the subsumption-based component
of tabling and a few builtins.
The contents of file sub_insert.c has been spread across several
files; the new file sub_tables_xsb_i.h contains the subsumptive call
check/insert operation formerly found there. There are also two other
new files to house the different flavors of trie routines as discussed
above: trie_lookup.c and trie_search.c
These trie routines rely on several auxiliary data areas, primarily
stacks. Two new files, dynamic_stack.[ch], contain the basic
machinery for creating and manipulating a dynamic stack. A couple of
the stacks needed by the trie routines have been converted so far. A
few still remain to be converted.