Added typedefs for node handles and addresses,
updated the interface and code to use these.
Switched to one pool of nodes per forest,
instead of one pool per level.
Changed free list representation for node handles.
The node storage mechanism is now loosely coupled,
and may be selected at runtime.
The node memory recycling mechanism is now loosely coupled.
There are a few mechanisms to choose from.
Added a new node storage mechanism that uses compression.
Added ability to read and write DDs to a file.
Simple Interface Changes
The forest policy for specifying full vs sparse node storage has changed.
Now, this is specified via storage_flags
by combining flags ALLOW_FULL_STORAGE
and ALLOW_SPARSE_STORAGE as appropriate.
The node storage scheme may be changed on a per forest basis,
at runtime, by setting the forest policy as appropriate
(member nodestor).
Removed forest policy recycleNodeStorageHoles,
since the new policy nodestor
allows to specify how nodes are stored and how holes are
tracked (if at all).
In the forest class, added methods
writeEdges, to write one or more edges
(and all nodes below) to a file in a machine readable format
readEdges, to read one or more edges
(and all nodes below) from a file
Expert Interface Changes
The node storage interface has changed.
This is likely to affect forest implementations, and not much else.
Different node storage schemes are implemented in the
storage subdirectory.
Motivated users may invent and use their own schemes.
In the expert_forest class, method reportMemoryUsage
has been replaced by method reportStats.
expert_forest::markNodesInSubgraph and
expert_forest::showNodeGraph
now take an array of root nodes, instead of a single one.