summaryrefslogtreecommitdiff
path: root/perllib/Graph/AdjacencyMap/Vertex.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/Graph/AdjacencyMap/Vertex.pm')
-rw-r--r--perllib/Graph/AdjacencyMap/Vertex.pm216
1 files changed, 0 insertions, 216 deletions
diff --git a/perllib/Graph/AdjacencyMap/Vertex.pm b/perllib/Graph/AdjacencyMap/Vertex.pm
deleted file mode 100644
index 72d81427..00000000
--- a/perllib/Graph/AdjacencyMap/Vertex.pm
+++ /dev/null
@@ -1,216 +0,0 @@
-package Graph::AdjacencyMap::Vertex;
-
-# THIS IS INTERNAL IMPLEMENTATION ONLY, NOT TO BE USED DIRECTLY.
-# THE INTERFACE IS HARD TO USE AND GOING TO STAY THAT WAY AND
-# ALMOST GUARANTEED TO CHANGE OR GO AWAY IN FUTURE RELEASES.
-
-use strict;
-
-# $SIG{__DIE__ } = sub { use Carp; confess };
-# $SIG{__WARN__} = sub { use Carp; confess };
-
-use Graph::AdjacencyMap qw(:flags :fields);
-use base 'Graph::AdjacencyMap';
-
-use Scalar::Util qw(weaken);
-
-sub _new {
- my ($class, $flags, $arity) = @_;
- bless [ 0, $flags, $arity ], $class;
-}
-
-require overload; # for de-overloading
-
-sub __set_path {
- my $m = shift;
- my $f = $m->[ _f ];
- my $id = pop if ($f & _MULTI);
- if (@_ != 1) {
- require Carp;
- Carp::confess(sprintf "Graph::AdjacencyMap::Vertex: arguments %d expected 1", scalar @_);
- }
- my $p;
- $p = $m->[ _s ] ||= { };
- my @p = $p;
- my @k;
- my $k = shift;
- my $q = ref $k && ($f & _REF) && overload::Method($k, '""') ? overload::StrVal($k) : $k;
- push @k, $q;
- return (\@p, \@k);
-}
-
-sub __set_path_node {
- my ($m, $p, $l) = splice @_, 0, 3;
- my $f = $m->[ _f ];
- my $id = pop if ($f & _MULTI);
- unless (exists $p->[-1]->{ $l }) {
- my $i = $m->_new_node( \$p->[-1]->{ $l }, $id );
- $m->[ _i ]->{ defined $i ? $i : "" } = $_[0];
- } else {
- $m->_inc_node( \$p->[-1]->{ $l }, $id );
- }
-}
-
-sub set_path {
- my $m = shift;
- my $f = $m->[ _f ];
- my ($p, $k) = $m->__set_path( @_ );
- return unless defined $p && defined $k;
- my $l = defined $k->[-1] ? $k->[-1] : "";
- my $set = $m->__set_path_node( $p, $l, @_ );
- return $set;
-}
-
-sub __has_path {
- my $m = shift;
- my $f = $m->[ _f ];
- if (@_ != 1) {
- require Carp;
- Carp::confess(sprintf
- "Graph::AdjacencyMap: arguments %d expected 1\n",
- scalar @_);
- }
- my $p = $m->[ _s ];
- return unless defined $p;
- my @p = $p;
- my @k;
- my $k = shift;
- my $q = ref $k && ($f & _REF) && overload::Method($k, '""') ? overload::StrVal($k) : $k;
- push @k, $q;
- return (\@p, \@k);
-}
-
-sub has_path {
- my $m = shift;
- my ($p, $k) = $m->__has_path( @_ );
- return unless defined $p && defined $k;
- return exists $p->[-1]->{ defined $k->[-1] ? $k->[-1] : "" };
-}
-
-sub has_path_by_multi_id {
- my $m = shift;
- my $id = pop;
- my ($e, $n) = $m->__get_path_node( @_ );
- return undef unless $e;
- return exists $n->[ _nm ]->{ $id };
-}
-
-sub _get_path_id {
- my $m = shift;
- my $f = $m->[ _f ];
- my ($e, $n) = $m->__get_path_node( @_ );
- return undef unless $e;
- return ref $n ? $n->[ _ni ] : $n;
-}
-
-sub _get_path_count {
- my $m = shift;
- my $f = $m->[ _f ];
- my ($e, $n) = $m->__get_path_node( @_ );
- return 0 unless $e && defined $n;
- return
- ($f & _COUNT) ? $n->[ _nc ] :
- ($f & _MULTI) ? scalar keys %{ $n->[ _nm ] } : 1;
-}
-
-sub __attr {
- my $m = shift;
- if (@_ && ref $_[0] && @{ $_[0] } != $m->[ _a ]) {
- require Carp;
- Carp::confess(sprintf "Graph::AdjacencyMap::Vertex: arguments %d expected %d",
- scalar @{ $_[0] }, $m->[ _a ]);
- }
-}
-
-sub _get_id_path {
- my ($m, $i) = @_;
- return defined $m->[ _i ] ? $m->[ _i ]->{ $i } : undef;
-}
-
-sub del_path {
- my $m = shift;
- my $f = $m->[ _f ];
- my ($e, $n, $p, $k, $l) = $m->__get_path_node( @_ );
- return unless $e;
- my $c = ($f & _COUNT) ? --$n->[ _nc ] : 0;
- if ($c == 0) {
- delete $m->[ _i ]->{ ref $n ? $n->[ _ni ] : $n };
- delete $p->[ -1 ]->{ $l };
- }
- return 1;
-}
-
-sub del_path_by_multi_id {
- my $m = shift;
- my $f = $m->[ _f ];
- my $id = pop;
- my ($e, $n, $p, $k, $l) = $m->__get_path_node( @_ );
- return unless $e;
- delete $n->[ _nm ]->{ $id };
- unless (keys %{ $n->[ _nm ] }) {
- delete $m->[ _i ]->{ $n->[ _ni ] };
- delete $p->[-1]->{ $l };
- }
- return 1;
-}
-
-sub paths {
- my $m = shift;
- return map { [ $_ ] } values %{ $m->[ _i ] } if defined $m->[ _i ];
- wantarray ? ( ) : 0;
-}
-
-1;
-=pod
-
-=head1 NAME
-
-Graph::AdjacencyMap - create and a map of graph vertices or edges
-
-=head1 SYNOPSIS
-
- Internal.
-
-=head1 DESCRIPTION
-
-B<This module is meant for internal use by the Graph module.>
-
-=head2 Object Methods
-
-=over 4
-
-=item del_path(@id)
-
-Delete a Map path by ids.
-
-=item del_path_by_multi_id($id)
-
-Delete a Map path by a multi(vertex) id.
-
-=item has_path(@id)
-
-Return true if the Map has the path by ids, false if not.
-
-=item has_path_by_multi_id($id)
-
-Return true ifd the a Map has the path by a multi(vertex) id, false if not.
-
-=item paths
-
-Return all the paths of the Map.
-
-=item set_path(@id)
-
-Set the path by @ids.
-
-=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