summaryrefslogtreecommitdiff
path: root/perllib/Graph/Matrix.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/Graph/Matrix.pm')
-rw-r--r--perllib/Graph/Matrix.pm82
1 files changed, 82 insertions, 0 deletions
diff --git a/perllib/Graph/Matrix.pm b/perllib/Graph/Matrix.pm
new file mode 100644
index 00000000..d3b9d407
--- /dev/null
+++ b/perllib/Graph/Matrix.pm
@@ -0,0 +1,82 @@
+package Graph::Matrix;
+
+# $SIG{__DIE__ } = sub { use Carp; confess };
+# $SIG{__WARN__} = sub { use Carp; confess };
+
+use strict;
+
+sub new {
+ my ($class, $g) = @_;
+ my @V = $g->vertices;
+ my $V = @V;
+ my %V; @V{ @V } = 0 .. $#V;
+ bless [ [ map { [ ] } 0 .. $#V ], \%V ], $class;
+}
+
+sub set {
+ my ($m, $u, $v, $val) = @_;
+ my ($i, $j) = map { $m->[1]->{ $_ } } ($u, $v);
+ $m->[0]->[$i]->[$j] = $val;
+}
+
+sub get {
+ my ($m, $u, $v) = @_;
+ my ($i, $j) = map { $m->[1]->{ $_ } } ($u, $v);
+ $m->[0]->[$i]->[$j];
+}
+
+1;
+__END__
+=pod
+
+=head1 NAME
+
+Graph::Matrix - create and manipulate a V x V matrix of graph G
+
+=head1 SYNOPSIS
+
+ use Graph::Matrix;
+ use Graph::Directed;
+ my $g = Graph::Directed->new;
+ $g->add_...(); # build $g
+ my $m = Graph::Matrix->new($g);
+ $m->get($u, $v)
+ $s->get($u, $v, $val)
+
+=head1 DESCRIPTION
+
+B<This module is meant for internal use by the Graph module.>
+
+=head2 Class Methods
+
+=over 4
+
+=item new($g)
+
+Construct a new Matrix from the Graph $g.
+
+=back
+
+=head2 Object Methods
+
+=over 4
+
+=item get($u, $v)
+
+Return the value at the edge from $u to $v.
+
+=item set($u, $v, $val)
+
+Set the edge from $u to $v to value $val.
+
+=back
+
+=head1 AUTHOR AND COPYRIGHT
+
+Jarkko Hietaniemi F<jhi@iki.fi>
+
+=head1 LICENSE
+
+This module is licensed under the same terms as Perl itself.
+
+=cut