Some questions about the implementation details:
1. I was just noticing that the hash-table that is used for duplicate detection is only used in the generate-graph-nodes method, but is kept as a slot in standard-graph-output-record. Is there any reason I shouldn't turn this into a local variable in generate-graph-nodes? I'm concerned that, for large graphs, this could end up being a pretty large piece of uncollectable garbage. It might be even worse if the duplicate-test argument forces us to have a node list instead of a hash-table.
I suppose if I do this, then we might get away with not keeping duplicate-test and duplicate-key in the graph-output-record objects, either...
2. Can anyone explain to me why :duplicate-test and :duplicate-key are keyword arguments to generate-graph-nodes but :merge-duplicates is not? Seems odd...
3. The existing code has the following lambda list for FORMAT-GRAPH-FROM ROOTS:
(root-objects object-printer inferior-producer &rest graph-options &key stream orientation cutoff-depth merge-duplicates duplicate-key duplicate-test generation-separation within-generation-separation center-nodes (arc-drawer #'clim-internals::standard-arc-drawer) arc-drawing-options graph-type (move-cursor t) &allow-other-keys)
then has the following immediately below:
(setf stream (or stream *standard-output*) graph-type (or graph-type (if merge-duplicates :digraph :tree)) duplicate-key (or duplicate-key #'identity) duplicate-test (or duplicate-test #'eql) )
Could we have duplicate-key and duplicate-test simply get their defaults in the lambda-list? Or is this not feasible because of the GRAPH-OPTIONS &rest argument?
Thanks, Robert