File Coverage

blib/lib/Astro/STSDAS/Table/HeaderPars.pm
Criterion Covered Total %
statement 44 48 91.6
branch 7 8 87.5
condition 1 3 33.3
subroutine 12 13 92.3
pod 8 8 100.0
total 72 80 90.0


line stmt bran cond sub pod time code
1             package Astro::STSDAS::Table::HeaderPars;
2              
3             require 5.005_62;
4 3     3   64538 use strict;
  3         6  
  3         119  
5 3     3   17 use warnings;
  3         6  
  3         110  
6              
7 3     3   15 use Carp;
  3         6  
  3         425  
8              
9             our $VERSION = '0.02';
10              
11 3     3   2320 use Astro::STSDAS::Table::HeaderPar;
  3         8  
  3         2803  
12              
13             # manages the header parameters
14              
15             sub new
16             {
17 2     2 1 18 my $class = shift;
18 2   33     16 $class = ref($class) || $class;
19              
20              
21 2         10 my $self = {
22             vars => {},
23             idx => 0,
24             };
25              
26 2         18 bless $self, $class;
27             }
28              
29             sub npars
30             {
31 5     5 1 1543 scalar keys %{$_[0]->{vars}};
  5         34  
32             }
33              
34             sub add
35             {
36 3     3 1 486 my $self = shift;
37              
38 3         7 my $name = uc shift;
39              
40 3         22 $self->_add(
41             Astro::STSDAS::Table::HeaderPar->new( ++$self->{idx},
42             $name, @_ ) );
43             }
44              
45             sub _add
46             {
47 4     4   7 my ( $self, $par ) = @_;
48              
49 4 100       15 if ( exists $self->{vars}{uc $par->name} )
50             {
51 1         2 $self->{idx}--;
52 1         4 croak( __PACKAGE__, "->add: duplicate parameter name `",
53             $par->name, "'\n" );
54             }
55              
56 3         13 $self->{vars}{$par->name} = $par;
57              
58 3         13 $par;
59             }
60              
61             sub pars
62             {
63 1     1 1 3 return sort { $a->idx <=> $b->idx } values %{$_[0]->{vars}};
  1         4  
  1         9  
64             }
65              
66             sub byname
67             {
68 6     6 1 25 my $name = uc $_[1];
69 6 100       33 return undef unless exists $_[0]->{vars}{$name};
70 4         23 $_[0]->{vars}{$name};
71             }
72              
73              
74             sub delbyname
75             {
76 4     4 1 8 my $self = shift;
77 4         8 my $name = uc shift;
78              
79 4 100       22 return 0 unless exists $self->{vars}{$name};
80              
81 3         8 delete $self->{vars}{$name};
82 3         11 1;
83             }
84              
85             sub rename
86             {
87 1     1 1 3165 my ( $self, $name, $newname ) = @_;
88              
89 1         6 my $hdrp = $self->byname($name);
90 1 50       6 return undef unless defined $hdrp;
91              
92 1         5 $self->delbyname( $name );
93              
94 1         7 $hdrp->name($newname);
95 1         5 $self->_add( $hdrp );
96             }
97              
98              
99             sub copy
100             {
101 0     0 1   my $self = shift;
102              
103 0           my $new = $self->new;
104              
105 0           $new->_add( $_->copy ) foreach values %{$self->{vars}};
  0            
106             }
107              
108              
109             1;
110             __END__