File Coverage

blib/lib/Set/Scalar/Real.pm
Criterion Covered Total %
statement 55 55 100.0
branch 7 8 87.5
condition n/a
subroutine 15 15 100.0
pod 0 5 0.0
total 77 83 92.7


line stmt bran cond sub pod time code
1             package Set::Scalar::Real;
2              
3 22     22   125 use strict;
  22         39  
  22         1981  
4             local $^W = 1;
5              
6 22     22   113 use vars qw($VERSION @ISA);
  22         72  
  22         4597  
7              
8             $VERSION = '1.29';
9             @ISA = qw(Set::Scalar::Base);
10              
11 22     22   120 use Set::Scalar::Base qw(_make_elements _binary_underload);
  22         50  
  22         1796  
12              
13             use overload
14 22         243 '+=' => \&_insert_overload,
15             '-=' => \&_delete_overload,
16 22     22   119 '/=' => \&_invert_overload;
  22         45  
17              
18             sub insert {
19 934     934 0 1336 my $self = shift;
20              
21 934         2761 $self->_insert( { _make_elements @_ } );
22              
23 934         3364 return $self;
24             }
25              
26             sub _insert_overload {
27 8     8   110 my ($this, $that) = _binary_underload( \@_ );
28              
29 8 50       21 $that = (ref $this)->new($that) unless ref $that;
30              
31 8         28 $this->insert( $that->elements );
32              
33 8         29 return $this;
34             }
35              
36             sub _delete {
37 9154     9154   13998 my $self = shift;
38 9154         11087 my $elements = shift;
39              
40 9154         23035 delete @{ $self->{'elements'} }{ keys %$elements };
  9154         27323  
41              
42 9154         40180 $self->_invalidate_cached;
43              
44 9154         17320 return $self;
45             }
46              
47             sub delete {
48 9154     9154 0 12520 my $self = shift;
49              
50 9154         23502 $self->_delete( { _make_elements @_ } );
51             }
52              
53             sub _delete_overload {
54 2     2   14 my ($this, $that) = _binary_underload( \@_ );
55              
56 2         6 $this->delete( $that->elements );
57              
58 2         7 return $this;
59             }
60              
61             sub _invert {
62 13     13   21 my $self = shift;
63 13         18 my $elements = shift;
64              
65 13         41 foreach my $element ( keys %$elements ) {
66 40 100       93 if ( exists $self->{'elements'}->{ $element } ) {
67 17         41 delete $self->{'elements'}->{ $element };
68             } else {
69 23         63 $self->{'elements'}->{ $element } = $elements->{ $element };
70             }
71             }
72              
73 13         137 $self->_invalidate_cached;
74             }
75              
76             sub invert {
77 13     13 0 27 my $self = shift;
78              
79 13         41 $self->_invert( { _make_elements @_ } );
80              
81 13         45 return $self;
82             }
83              
84             sub _invert_overload {
85 3     3   20 my ($this, $that) = _binary_underload( \@_ );
86              
87 3         10 $this->invert( $that->elements );
88              
89 3         8 return $this;
90             }
91              
92             sub clear {
93 6428     6428 0 10249 my $self = shift;
94              
95 6428 100       14836 die __PACKAGE__ . "::clear(): need no arguments.\n" if @_;
96              
97 6427         17665 $self->delete( $self->elements );
98              
99 6427         41814 return $self;
100             }
101              
102             sub fill {
103 2     2 0 23 my $self = shift;
104              
105 2 100       9 die __PACKAGE__ . "::fill(): need no arguments.\n" if @_;
106              
107 1         4 $self->insert( $self->universe->elements );
108              
109 1         2 return $self;
110             }
111              
112             sub DESTROY {
113 6429     6429   26665 my $self = shift;
114              
115 6429         12858 delete $self->{'null' };
116 6429         11086 delete $self->{'universe'};
117              
118 6429         16072 $self->clear;
119             }
120              
121             =pod
122              
123             =head1 NAME
124              
125             Set::Scalar::Real - internal class for Set::Scalar
126              
127             =head1 SYNOPSIS
128              
129             B.
130              
131             =head1 DESCRIPTION
132              
133             B
134             If you want documentation see L.
135              
136             =head1 AUTHOR
137              
138             Jarkko Hietaniemi
139              
140             =cut
141              
142             1;