← Index
NYTProf Performance Profile   « block view • line view • sub view »
For 05.Domain_and_Item.t
  Run on Tue May 4 17:21:41 2010
Reported on Tue May 4 17:22:21 2010

File /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Meta/TypeConstraint/Union.pm
Statements Executed 37
Statement Execution Time 809µs
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111354µs598µsMoose::Meta::TypeConstraint::Union::::BEGIN@8Moose::Meta::TypeConstraint::Union::BEGIN@8
11182µs669µsMoose::Meta::TypeConstraint::Union::::newMoose::Meta::TypeConstraint::Union::new
21121µs48µsMoose::Meta::TypeConstraint::Union::::__ANON__[:50]Moose::Meta::TypeConstraint::Union::__ANON__[:50]
11118µs20µsMoose::Meta::TypeConstraint::Union::::_actually_compile_type_constraintMoose::Meta::TypeConstraint::Union::_actually_compile_type_constraint
11114µs17µsMoose::Meta::TypeConstraint::Union::::BEGIN@4Moose::Meta::TypeConstraint::Union::BEGIN@4
1117µs16µsMoose::Meta::TypeConstraint::Union::::BEGIN@5Moose::Meta::TypeConstraint::Union::BEGIN@5
1117µs48µsMoose::Meta::TypeConstraint::Union::::BEGIN@14Moose::Meta::TypeConstraint::Union::BEGIN@14
1116µs126µsMoose::Meta::TypeConstraint::Union::::BEGIN@6Moose::Meta::TypeConstraint::Union::BEGIN@6
1123µs3µsMoose::Meta::TypeConstraint::Union::::CORE:sortMoose::Meta::TypeConstraint::Union::CORE:sort (opcode)
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:18]Moose::Meta::TypeConstraint::Union::__ANON__[:18]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:32]Moose::Meta::TypeConstraint::Union::__ANON__[:32]
0000s0sMoose::Meta::TypeConstraint::Union::::create_child_typeMoose::Meta::TypeConstraint::Union::create_child_type
0000s0sMoose::Meta::TypeConstraint::Union::::equalsMoose::Meta::TypeConstraint::Union::equals
0000s0sMoose::Meta::TypeConstraint::Union::::is_a_type_ofMoose::Meta::TypeConstraint::Union::is_a_type_of
0000s0sMoose::Meta::TypeConstraint::Union::::is_subtype_ofMoose::Meta::TypeConstraint::Union::is_subtype_of
0000s0sMoose::Meta::TypeConstraint::Union::::parentsMoose::Meta::TypeConstraint::Union::parents
0000s0sMoose::Meta::TypeConstraint::Union::::validateMoose::Meta::TypeConstraint::Union::validate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Moose::Meta::TypeConstraint::Union;
3
4325µs219µs
# spent 17µs (14+3) within Moose::Meta::TypeConstraint::Union::BEGIN@4 which was called # once (14µs+3µs) by Moose::Util::TypeConstraints::BEGIN@29 at line 4
use strict;
# spent 17µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@4 # spent 3µs making 1 call to strict::import
5323µs224µs
# spent 16µs (7+8) within Moose::Meta::TypeConstraint::Union::BEGIN@5 which was called # once (7µs+8µs) by Moose::Util::TypeConstraints::BEGIN@29 at line 5
use warnings;
# spent 16µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@5 # spent 8µs making 1 call to warnings::import
6324µs2246µs
# spent 126µs (6+120) within Moose::Meta::TypeConstraint::Union::BEGIN@6 which was called # once (6µs+120µs) by Moose::Util::TypeConstraints::BEGIN@29 at line 6
use metaclass;
# spent 126µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@6 # spent 120µs making 1 call to metaclass::import
7
83133µs1598µs
# spent 598µs (354+244) within Moose::Meta::TypeConstraint::Union::BEGIN@8 which was called # once (354µs+244µs) by Moose::Util::TypeConstraints::BEGIN@29 at line 8
use Moose::Meta::TypeCoercion::Union;
# spent 598µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@8
9
101700nsour $VERSION = '0.98';
11113µs$VERSION = eval $VERSION;
121300nsour $AUTHORITY = 'cpan:STEVAN';
13
143470µs288µs
# spent 48µs (7+40) within Moose::Meta::TypeConstraint::Union::BEGIN@14 which was called # once (7µs+40µs) by Moose::Util::TypeConstraints::BEGIN@29 at line 14
use base 'Moose::Meta::TypeConstraint';
# spent 48µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@14 # spent 40µs making 1 call to base::import
15
16__PACKAGE__->meta->add_attribute('type_constraints' => (
17 accessor => 'type_constraints',
18 default => sub { [] }
1915µs2347µs));
# spent 328µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 19µs making 1 call to Moose::Meta::TypeConstraint::Union::meta
20
21
# spent 669µs (82+587) within Moose::Meta::TypeConstraint::Union::new which was called # once (82µs+587µs) by Moose::Util::TypeConstraints::create_type_constraint_union at line 94 of Moose/Util/TypeConstraints.pm
sub new {
22872µs my ($class, %options) = @_;
23
24 my $name = join '|' => sort { $a cmp $b }
# spent 3µs making 2 calls to Moose::Meta::TypeConstraint::name, avg 1µs/call
25 map { $_->name } @{ $options{type_constraints} };
# spent 3µs making 1 call to Moose::Meta::TypeConstraint::Union::CORE:sort
26
27 my $self = $class->SUPER::new(
# spent 162µs making 1 call to Moose::Meta::TypeConstraint::new
28 name => $name,
29 %options,
30 );
31
32 $self->_set_constraint(sub { $self->check($_[0]) });
# spent 2µs making 1 call to Moose::Meta::TypeConstraint::_set_constraint
33 $self->coercion(Moose::Meta::TypeCoercion::Union->new(
# spent 414µs making 1 call to Moose::Meta::TypeCoercion::new # spent 4µs making 1 call to Moose::Meta::TypeConstraint::coercion
34 type_constraint => $self
35 ));
36 return $self;
37}
38
39
# spent 20µs (18+3) within Moose::Meta::TypeConstraint::Union::_actually_compile_type_constraint which was called # once (18µs+3µs) by Moose::Meta::TypeConstraint::compile_type_constraint at line 181 of Moose/Meta/TypeConstraint.pm
sub _actually_compile_type_constraint {
40311µs my $self = shift;
41
42 my @constraints = @{ $self->type_constraints };
43
44
# spent 48µs (21+28) within Moose::Meta::TypeConstraint::Union::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Meta/TypeConstraint/Union.pm:50] which was called 2 times, avg 24µs/call: # 2 times (21µs+28µs) by SimpleDB::Class::ResultSet::new at line 49 of generated method (unknown origin), avg 24µs/call
return sub {
45617µs my $value = shift;
46 foreach my $type (@constraints) {
47 return 1 if $type->check($value);
# spent 28µs making 2 calls to Moose::Meta::TypeConstraint::check, avg 14µs/call
48 }
49 return undef;
50 };
51}
52
53
54sub equals {
55 my ( $self, $type_or_name ) = @_;
56
57 my $other = Moose::Util::TypeConstraints::find_type_constraint($type_or_name);
58
59 return unless $other->isa(__PACKAGE__);
60
61 my @self_constraints = @{ $self->type_constraints };
62 my @other_constraints = @{ $other->type_constraints };
63
64 return unless @self_constraints == @other_constraints;
65
66 # FIXME presort type constraints for efficiency?
67 constraint: foreach my $constraint ( @self_constraints ) {
68 for ( my $i = 0; $i < @other_constraints; $i++ ) {
69 if ( $constraint->equals($other_constraints[$i]) ) {
70 splice @other_constraints, $i, 1;
71 next constraint;
72 }
73 }
74 }
75
76 return @other_constraints == 0;
77}
78
79sub parents {
80 my $self = shift;
81 $self->type_constraints;
82}
83
84sub validate {
85 my ($self, $value) = @_;
86 my $message;
87 foreach my $type (@{$self->type_constraints}) {
88 my $err = $type->validate($value);
89 return unless defined $err;
90 $message .= ($message ? ' and ' : '') . $err
91 if defined $err;
92 }
93 return ($message . ' in (' . $self->name . ')') ;
94}
95
96sub is_a_type_of {
97 my ($self, $type_name) = @_;
98 foreach my $type (@{$self->type_constraints}) {
99 return 1 if $type->is_a_type_of($type_name);
100 }
101 return 0;
102}
103
104sub is_subtype_of {
105 my ($self, $type_name) = @_;
106 foreach my $type (@{$self->type_constraints}) {
107 return 1 if $type->is_subtype_of($type_name);
108 }
109 return 0;
110}
111
112sub create_child_type {
113 my ( $self, %opts ) = @_;
114
115 my $constraint
116 = Moose::Meta::TypeConstraint->new( %opts, parent => $self );
117
118 # if we have a type constraint union, and no
119 # type check, this means we are just aliasing
120 # the union constraint, which means we need to
121 # handle this differently.
122 # - SL
123 if ( not( defined $opts{constraint} )
124 && $self->has_coercion ) {
125 $constraint->coercion(
126 Moose::Meta::TypeCoercion::Union->new(
127 type_constraint => $self,
128 )
129 );
130 }
131
132 return $constraint;
133}
134
135114µs1;
136
137__END__
138
139=pod
140
141=head1 NAME
142
143Moose::Meta::TypeConstraint::Union - A union of Moose type constraints
144
145=head1 DESCRIPTION
146
147This metaclass represents a union of type constraints. A union takes
148multiple type constraints, and is true if any one of its member
149constraints is true.
150
151=head1 INHERITANCE
152
153C<Moose::Meta::TypeConstraint::Union> is a subclass of
154L<Moose::Meta::TypeConstraint>.
155
156=over 4
157
158=item B<< Moose::Meta::TypeConstraint::Union->new(%options) >>
159
160This creates a new class type constraint based on the given
161C<%options>.
162
163It takes the same options as its parent. It also requires an
164additional option, C<type_constraints>. This is an array reference
165containing the L<Moose::Meta::TypeConstraint> objects that are the
166members of the union type. The C<name> option defaults to the names
167all of these member types sorted and then joined by a pipe (|).
168
169The constructor sets the implementation of the constraint so that is
170simply calls C<check> on the newly created object.
171
172Finally, the constructor also makes sure that the object's C<coercion>
173attribute is a L<Moose::Meta::TypeCoercion::Union> object.
174
175=item B<< $constraint->type_constraints >>
176
177This returns the array reference of C<type_constraints> provided to
178the constructor.
179
180=item B<< $constraint->parents >>
181
182This returns the same constraint as the C<type_constraints> method.
183
184=item B<< $constraint->check($value) >>
185
186=item B<< $constraint->validate($value) >>
187
188These two methods simply call the relevant method on each of the
189member type constraints in the union. If any type accepts the value,
190the value is valid.
191
192With C<validate> the error message returned includes all of the error
193messages returned by the member type constraints.
194
195=item B<< $constraint->equals($type_name_or_object) >>
196
197A type is considered equal if it is also a union type, and the two
198unions have the same member types.
199
200=item B<< $constraint->is_a_type_of($type_name_or_object) >>
201
202This returns true if any of the member type constraints return true
203for the C<is_a_type_of> method.
204
205=item B<< $constraint->is_subtype_of >>
206
207This returns true if any of the member type constraints return true
208for the C<is_a_subtype_of> method.
209
210=item B<< $constraint->create_child_type(%options) >>
211
212This returns a new L<Moose::Meta::TypeConstraint> object with the type
213as its parent.
214
215=back
216
217=head1 BUGS
218
219See L<Moose/BUGS> for details on reporting bugs.
220
221=head1 AUTHOR
222
223Stevan Little E<lt>stevan@iinteractive.comE<gt>
224
225=head1 COPYRIGHT AND LICENSE
226
227Copyright 2006-2010 by Infinity Interactive, Inc.
228
229L<http://www.iinteractive.com>
230
231This library is free software; you can redistribute it and/or modify
232it under the same terms as Perl itself.
233
234=cut
# spent 3µs within Moose::Meta::TypeConstraint::Union::CORE:sort which was called # once (3µs+0s) by Moose::Meta::TypeConstraint::Union::new at line 25 of Moose/Meta/TypeConstraint/Union.pm
sub Moose::Meta::TypeConstraint::Union::CORE:sort; # xsub