package HeaderDoc::Dependency;
use strict;
use vars qw($VERSION @ISA);
use HeaderDoc::Utilities qw(isKeyword quote stringToFields casecmp);
$HeaderDoc::Dependency::VERSION = '$Revision: 1.3 $';
my $debugging = 0;
my $treeDebug = 0;
my %defaults = (
NAME => undef,
DEPNAME => undef,
MARKED => 0,
EXISTS => 0,
PARENT => undef,
CHILDREN => ()
);
sub new {
my($param) = shift;
my($class) = ref($param) || $param;
my %selfhash = %defaults;
my $self = \%selfhash;
bless($self, $class);
$self->_initialize();
my (%attributeHash) = @_;
foreach my $key (keys(%attributeHash)) {
my $ucKey = uc($key);
$self->{$ucKey} = $attributeHash{$key};
}
return ($self);
}
sub _initialize {
}
sub clone {
my $self = shift;
my $clone = undef;
if (@_) {
$clone = shift;
} else {
$clone = HeaderDoc::Dependency->new();
}
$clone->{PARENT} = $self->{PARENT};
$clone->{CHILDREN} = $self->{CHILDREN};
}
sub addchild {
my $self = shift;
my $child = shift;
push(@{$self->{CHILDREN}}, \$child);
}
my %namehash = ();
sub findname {
my $self = shift;
my $name = shift;
return $namehash{$name};
}
sub name {
my $self = shift;
if (@_) {
my $name = shift;
$self->{NAME} = $name;
}
return $self->{NAME};
}
sub depname {
my $self = shift;
if (@_) {
my $depname = shift;
$self->{DEPNAME} = $depname;
$namehash{$depname} = \$self;
}
return $self->{DEPNAME};
}
sub reparent {
my $self = shift;
my $name = shift;
my $node = ${findname($name)};
bless("HeaderDoc::Dependency", $node);
my $oldparent = $node->parent;
my @children = @{$oldparent->{CHILDREN}};
my @newkids = ();
foreach my $childref (@children) {
if ($childref != \$node) {
push(@newkids, $childref);
}
}
$oldparent->{CHILDREN} = @newkids;
$self->addchild($node);
}
sub dbprint {
my $self = shift;
my $indent = "";
if (@_) {
$indent = shift;
}
print STDERR $indent."o---+".$self->{NAME}." (DEPTH ".$self->{DEPTH}.")\n";
if ($self->{PRINTED}) {
print STDERR $indent." |--- Infinite recursion detected. Aborting.\n";
return;
}
my $childindent = $indent."| ";
$self->{PRINTED} = 1;
foreach my $childref (@{$self->{CHILDREN}}) {
my $childnode = ${$childref};
bless($childnode, "HeaderDoc::Dependency");
$childnode->dbprint($childindent);
}
print STDERR "$indent\n";
}
1;