Algorithm-TSort
view release on metacpan or search on metacpan
lib/Algorithm/TSort.pm view on Meta::CPAN
# vim: ft=perl sts=4 ts=8 sw=4 et ff=unix
package Algorithm::TSort;
use 5.007003;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
# This allows declaration use Algorithm::TSort ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
tsort
Graph
) ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw( tsort );
our $VERSION = '0.05';
{
package Algorithm::TSort::ADJ;
sub adj_nodes {
my $self = shift;
my $node = shift;
for ( $self->{$node} ) {
return @$_ if ref;
}
return ();
}
sub nodes {
return keys %{ $_[0] };
}
package Algorithm::TSort::ADJSUB;
sub adj_nodes {
my $self = shift;
my $node = shift;
return $$self->($node);
}
package Algorithm::TSort::ADJSUB_ARRAYREF;
sub adj_nodes {
my $array = $_[0]->( $_[1] );
return $array ? @$array : ();
}
package Algorithm::TSort::Guard;
sub new{
return bless $_[1], $_[0];
}
sub DESTROY { $_[0]->() };
}
sub Graph($$) {
my $what = shift;
my $data = shift;
die "Graph: undefined input" unless defined $what;
if ( $what eq 'IO' || $what eq 'SCALAR' ) {
my %c;
my $line;
my $fh;
if ( $what eq 'SCALAR' ) {
open $fh, "<", \$data;
}
else {
$fh = $data;
}
( run in 0.756 second using v1.01-cache-2.11-cpan-39bf76dae61 )