NAME
Devel::MAT::Graph
- a set of references between related SVs
DESCRIPTION
Instances of this class represent an entire graph of references between related SVs, as a helper method for return values from various Devel::MAT methods, which might be used for some sort of screen layout or other analysis tasks.
CONSTRUCTOR
new
$graph
= Devel::MAT::Graph->new(
$dumpfile
);
Constructs a new Devel::MAT::Graph
instance backed by the given dumpfile (which is only actually used to make the $node->sv
method work).
MUTATION METHODS
add_sv
$graph
->add_sv(
$sv
);
Makes the graph aware of the given Devel::MAT::SV. This is not strictly necessary before calling add_ref
or add_root
, but ensures that has_sv
will return true immediately after it, and so can be used as a sentinel for recursion control.
add_ref
$graph
->add_ref(
$from_sv
,
$to_sv
,
$desc
);
Adds an edge to the graph, from and to the given SVs, with the given description.
add_root
$graph
->add_root(
$from_sv
,
$desc
);
Adds a root edge to the graph, at the given SV with the given description.
QUERY METHODS
has_sv
$bool
=
$graph
->has_sv(
$sv
);
Returns true if the graph has edges or roots for the given SV, or it has at least been given to add_sv
.
get_sv_node
$node
=
$graph
->get_sv_node(
$sv
);
Returns a Node
object for the given SV.
get_root_nodes
@desc_nodes
=
$graph
->get_root_nodes;
Returns an even-sized list of pairs, containing root descriptions and the nodes having those roots, in no particular order.
NODE OBJECTS
The values returned by get_sv_node
respond to the following methods:
graph
$graph
=
$node
->graph;
Returns the containing Devel::MAT::Graph
instance.
addr
$addr
=
$node
->addr;
Returns the address of the SV represented by this node.
sv
$sv
=
$node
->sv;
Returns the SV object itself, as taken from the dumpfile instance.
roots
@roots
=
$node
->roots;
Returns any root descriptions given (by calls to $graph->add_root
for the SV at this node.
$graph
->add_root(
$sv
,
$desc
);
(
$desc
, ... ) =
$graph
->get_sv_node(
$sv
)->roots;
edges_out
@edges
=
$node
->edges_out;
Returns an even-sized list of any edge descriptions and more Node
objects given as references (by calls to $graph->add_ref
) from the SV at this node.
$graph
->add_ref(
$from_sv
,
$to_sv
,
$desc
);
(
$desc
,
$to_edge
, ... ) =
$graph
->get_sv_node(
$from_sv
)->edges_out;
edges_out (scalar)
$n_edges
=
$node
->edges_out;
In scalar context, returns the number of edges that exist; i.e. half the size of the pairlist that would be returned in list context.
edges_in
@edges
=
$node
->edges_in;
Similar to edges_out
, but returns edges in the opposite direction; i.e. edges of references to this node.
$graph
->add_ref(
$from_sv
,
$to_sv
,
$desc
);
(
$desc
,
$from_edge
, ... ) =
$graph
->get_sv_node(
$to_sv
)->edges_in;
edges_in (scalar)
$n_edges
=
$node
->edges_out;
In scalar context, returns the number of edges that exist; i.e. half the size of the pairlist that would be returned in list context.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>