/usr/local/CPAN/CORBA-MICO/CORBA/MICO/NCRoot.pm


package CORBA::MICO::NCRoot;

use Carp;

require CORBA::MICO;
require CORBA::MICO::NCEntry;

use strict;

#--------------------------------------------------------------------
sub new {
  my ($type, $nc_node) = @_;
  my $class = ref($type) || $type;
  my $self = { 'ROOT'       => $nc_node,
               'ENTRIES'    => {} };
  bless $self, $class;
  $self->store_entry('', $nc_node);
  return $self;
}

#--------------------------------------------------------------------
sub entry {
  my ($self, $name) = @_;
  return exists($self->{'ENTRIES'}->{$name}) ? $self->{'ENTRIES'}->{$name}
                                             : $self->_entry($name);
}

#--------------------------------------------------------------------
sub store_entry {
  my ($self, $name, $node) = @_;
  my $entry = new CORBA::MICO::NCEntry($name, $node, $self);
  $self->{'ENTRIES'}->{$name}     ||= $entry;
}

#--------------------------------------------------------------------
sub contents {
  my ($self) = @_;
  return $self->entry('')->contents();
}

#--------------------------------------------------------------------
sub is_ncontext {
  my ($self) = @_;
  return $self->entry('')->is_ncontext();
}

#--------------------------------------------------------------------
sub _entry {
  my ($self, $name) = @_;
  my $node = $self->{'ENTRIES'}->{''}->lookup($name) or return undef;
  return $self->store_entry($name, $node);
}

1;