# 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>