=head1 NAME
Treex::PML::Struct - PML attribute value structure
=head1 DESCRIPTION
This class implements the data type 'structure'. Structure consists
of items called members. Each member is a name-value pair, where the
name uniquely determines the member within the structure
(i.e. distinct members of a structure have distinct names).
=over 4
=cut
use Carp;
use vars qw($VERSION);
BEGIN {
$VERSION='2.05'; # version template
}
use strict;
=item Treex::PML::Struct->new ({name=>value, ...},reuse?)
NOTE: Don't call this constructor directly, use Treex::PML::Factory->createStructure() instead!
Create a new structure (optionally initializing its members). If
reuse is true, the hash reference passed may be reused (re-blessed)
into the structure.
=cut
sub new {
my ($class,$hash,$reuse) = @_;
if (ref $hash) {
return $reuse ? bless $hash, $class
: bless Treex::PML::CloneValue($hash), $class;
} else {
return bless {}, $class;
}
}
=item $struct->get_member ($name)
Return value of the given member.
=cut
sub get_member {
my ($self,$name) = @_;
return unless defined $name;
return $self->{$name};
}
=item $struct->set_member ($name,$value)
Set value of the given member.
=cut
sub set_member {
my ($self,$name,$value) = @_;
return unless defined $name;
return $self->{$name}=$value;
}
=item $struct->delete_member ($name)
Delete the given member (returning its last value).
=cut
sub delete_member {
my ($self,$name) = @_;
return unless defined $name;
return delete $self->{$name};
}
=item $struct->members ()
Return (assorted) list of names of all members.
=cut
sub members {
return keys %{$_[0]};
}
=back
=cut
sub DESTROY {
my ($self) = @_;
%{$self}=(); # this should not be needed, but
# without it, perl 5.10 leaks on weakened
# structures, try:
# Scalar::Util::weaken({}) while 1
}
1;
__END__
=head1 SEE ALSO
L<Treex::PML>, L<Treex::PML::Factory>, L<Treex::PML::Schema>, L<Treex::PML::Container>, L<Treex::PML::Seq>, L<Treex::PML::Node>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2006-2010 by Petr Pajas
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.2 or,
at your option, any later version of Perl 5 you may have available.
=cut