File Coverage

blib/lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
Criterion Covered Total %
statement 42 42 100.0
branch 8 8 100.0
condition 5 5 100.0
subroutine 13 13 100.0
pod 0 6 0.0
total 68 74 91.8


line stmt bran cond sub pod time code
1             package SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
2 82     82   1581 use strict;
  82         146  
  82         3078  
3 82     82   441 use warnings;
  82         189  
  82         2902  
4 82     82   1551 use Class::Std::Fast::Storable constructor => 'none', cache => 1;
  82         33109  
  82         947  
5 82     82   55719 use SOAP::WSDL::XSD::Typelib::Builtin::anyType;
  82         311  
  82         2528  
6 82     82   466 use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
  82         269  
  82         33793  
7              
8             my %value_of :ATTR(:get :init_arg :default<()>);
9              
10             # don't you never dare to play with this !
11             our $___value = \%value_of;
12              
13             ## use $_[n] for speed - we get called zillions of times...
14             # and we don't need to return the last value...
15 72     72 0 19203 sub set_value { $value_of{ ${ $_[0] } } = $_[1] }
  72         4526  
16              
17             # Default attribute handling
18             # TODO add something for handling default attributes
19 1     1 0 48 sub attr {
20             }
21              
22             # use $_[n] for speed.
23             # This is less readable, but notably faster.
24             #
25             # use postfix-if for speed. This is slightly faster, as it saves
26             # perl from creating a pad (variable context).
27             #
28             # The methods below may get called zillions of times, so
29             # every little statement matters...
30              
31             sub serialize {
32 6   100 6 0 2716 $_[1] ||= {};
33 6 100       9 if (not defined $value_of{ ${$_[0]} }) {
  6         23  
34 3         7 return $_[0]->start_tag({ %{ $_[1] }, nil => 1 }, undef);
  3         18  
35             }
36 3         15 return join q{}
37 3         13 , $_[0]->start_tag($_[1], $value_of{ ${$_[0]} })
38 3         300 , $value_of{ ${$_[0]} }
39             , $_[0]->end_tag($_[1]);
40             }
41              
42             sub as_string :STRINGIFY {
43 50 100   50 0 19550 return defined($value_of { ${ $_[0] } }) ? $value_of { ${ $_[0] } } : q{};
  50         289  
  48         375  
44 82     82   534 }
  82         167  
  82         514  
45              
46             sub as_bool :BOOLIFY {
47 15     15 0 1055 return $value_of { ${ $_[0] } };
  15         151  
48 82     82   22091 }
  82         305  
  82         541  
49              
50             my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF();
51              
52             sub new {
53 155     155 0 57873 my $self = pop @{ $OBJECT_CACHE_REF->{ $_[0] } };
  155         557  
54 155 100       809 $self = bless \(my $o = Class::Std::Fast::ID()), $_[0]
55             if not defined $self;
56             $value_of{ $$self } = $_[1]->{ value }
57 155 100 100     5543 if (($#_) && exists $_[1]->{ value });
58 155         580 return $self;
59             }
60              
61             Class::Std::initialize(); # make :BOOLIFY overloading serializable
62              
63             1;