File Coverage

blib/lib/XML/XPathEngine/NodeSet.pm
Criterion Covered Total %
statement 50 73 68.4
branch 4 6 66.6
condition n/a
subroutine 16 25 64.0
pod 13 22 59.0
total 83 126 65.8


line stmt bran cond sub pod time code
1             # $Id: NodeSet.pm,v 1.17 2002/04/24 13:06:08 matt Exp $
2              
3             package XML::XPathEngine::NodeSet;
4 2     2   11 use strict;
  2         4  
  2         79  
5              
6 2     2   25 use XML::XPathEngine::Boolean;
  2         14  
  2         88  
7              
8             use overload
9 2         19 '""' => \&to_literal,
10             'bool' => \&to_boolean,
11 2     2   10 ;
  2         3  
12              
13             sub new {
14 1451     1451 1 1884 my $class = shift;
15 1451         4945 bless [], $class;
16             }
17              
18             sub sort {
19 22     22 0 37 my $self = CORE::shift;
20 22         92 @$self = CORE::sort { $a->cmp( $b) } @$self;
  80         739  
21 22         219 return $self;
22             }
23              
24             sub reverse {
25 0     0 0 0 my $self = CORE::shift;
26 0         0 @$self = reverse @$self;
27 0         0 return $self;
28             }
29              
30             sub remove_duplicates {
31 22     22 0 34 my $self = CORE::shift;
32 22         29 my @unique;
33 22         31 my $last_node=0;
34 22         41 foreach my $node (@$self) {
35 84 50       203 push @unique, $node unless( $node == $last_node);
36 84         137 $last_node= $node;
37             }
38 22         64 @$self= @unique;
39 22         95 return $self;
40             }
41              
42              
43             sub pop {
44 0     0 1 0 my $self = CORE::shift;
45 0         0 CORE::pop @$self;
46             }
47              
48             sub push {
49 1073     1073 1 1669 my $self = CORE::shift;
50 1073         1683 my (@nodes) = @_;
51 1073         3513 CORE::push @$self, @nodes;
52             }
53              
54             sub append {
55 615     615 1 797 my $self = CORE::shift;
56 615         768 my ($nodeset) = @_;
57 615         1114 CORE::push @$self, $nodeset->get_nodelist;
58             }
59              
60             sub shift {
61 0     0 1 0 my $self = CORE::shift;
62 0         0 CORE::shift @$self;
63             }
64              
65             sub unshift {
66 0     0 1 0 my $self = CORE::shift;
67 0         0 my (@nodes) = @_;
68 0         0 CORE::unshift @$self, @nodes;
69             }
70              
71             sub prepend {
72 0     0 1 0 my $self = CORE::shift;
73 0         0 my ($nodeset) = @_;
74 0         0 CORE::unshift @$self, $nodeset->get_nodelist;
75             }
76              
77             sub size {
78 1425     1425 1 1798 my $self = CORE::shift;
79 1425         4554 scalar @$self;
80             }
81              
82             sub get_node { # uses array index starting at 1, not 0
83 883     883 1 1025 my $self = CORE::shift;
84 883         1149 my ($pos) = @_;
85 883         2909 $self->[$pos - 1];
86             }
87              
88             sub getRootNode {
89 0     0 0 0 my $self = CORE::shift;
90 0         0 return $self->[0]->getRootNode;
91             }
92              
93             sub get_nodelist {
94 725     725 1 804 my $self = CORE::shift;
95 725         2490 @$self;
96             }
97              
98             sub getChildNodes {
99 1     1 0 2 my $self = CORE::shift;
100 1         3 return map { $_->getChildNodes } @$self;
  1         4  
101             }
102              
103             sub getElementById {
104 0     0 0 0 my $self = CORE::shift;
105 0         0 return map { $_->getElementById } @$self;
  0         0  
106             }
107              
108            
109             sub to_boolean {
110 571     571 0 657 my $self = CORE::shift;
111 571 100       1886 return (@$self > 0) ? XML::XPathEngine::Boolean->True : XML::XPathEngine::Boolean->False;
112             }
113              
114             sub string_value {
115 2     2 1 4 my $self = CORE::shift;
116 2 50       7 return '' unless @$self;
117 2         9 return $self->[0]->string_value;
118             }
119              
120             sub to_literal {
121 0     0 1 0 my $self = CORE::shift;
122 0         0 return XML::XPathEngine::Literal->new(
123 0         0 join('', map { $_->string_value } @$self)
124             );
125             }
126              
127             sub to_number {
128 0     0 0 0 my $self = CORE::shift;
129 0         0 return XML::XPathEngine::Number->new(
130             $self->to_literal
131             );
132             }
133              
134             sub to_final_value {
135 18     18 0 24 my $self = CORE::shift;
136 18         40 return join('', map { $_->string_value } @$self);
  77         564  
137             }
138              
139             sub string_values {
140 2     2 1 5 my $self = CORE::shift;
141 2         9 return map { $_->string_value } @$self;
  4         32  
142             }
143             1;
144             __END__