← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:37 2022

Filename/Users/ether/perl5/perlbrew/perls/36.0/lib/5.36.0/Tie/Array.pm
StatementsExecuted 9 statements in 1.12ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11154µs54µsTie::Array::::BEGIN@3 Tie::Array::BEGIN@3
11114µs43µsTie::Array::::BEGIN@4 Tie::Array::BEGIN@4
11111µs63µsTie::Array::::BEGIN@5 Tie::Array::BEGIN@5
0000s0sTie::Array::::CLEAR Tie::Array::CLEAR
0000s0sTie::Array::::DELETE Tie::Array::DELETE
0000s0sTie::Array::::DESTROY Tie::Array::DESTROY
0000s0sTie::Array::::EXISTS Tie::Array::EXISTS
0000s0sTie::Array::::EXTEND Tie::Array::EXTEND
0000s0sTie::Array::::POP Tie::Array::POP
0000s0sTie::Array::::PUSH Tie::Array::PUSH
0000s0sTie::Array::::SHIFT Tie::Array::SHIFT
0000s0sTie::Array::::SPLICE Tie::Array::SPLICE
0000s0sTie::Array::::UNSHIFT Tie::Array::UNSHIFT
0000s0sTie::StdArray::::CLEARTie::StdArray::CLEAR
0000s0sTie::StdArray::::DELETETie::StdArray::DELETE
0000s0sTie::StdArray::::EXISTSTie::StdArray::EXISTS
0000s0sTie::StdArray::::FETCHTie::StdArray::FETCH
0000s0sTie::StdArray::::FETCHSIZETie::StdArray::FETCHSIZE
0000s0sTie::StdArray::::POPTie::StdArray::POP
0000s0sTie::StdArray::::PUSHTie::StdArray::PUSH
0000s0sTie::StdArray::::SHIFTTie::StdArray::SHIFT
0000s0sTie::StdArray::::SPLICETie::StdArray::SPLICE
0000s0sTie::StdArray::::STORETie::StdArray::STORE
0000s0sTie::StdArray::::STORESIZETie::StdArray::STORESIZE
0000s0sTie::StdArray::::TIEARRAYTie::StdArray::TIEARRAY
0000s0sTie::StdArray::::UNSHIFTTie::StdArray::UNSHIFT
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Tie::Array;
2
3280µs154µs
# spent 54µs within Tie::Array::BEGIN@3 which was called: # once (54µs+0s) by YAML::PP::Preserve::Array::BEGIN@300 at line 3
use 5.006_001;
# spent 54µs making 1 call to Tie::Array::BEGIN@3
4277µs272µs
# spent 43µs (14+29) within Tie::Array::BEGIN@4 which was called: # once (14µs+29µs) by YAML::PP::Preserve::Array::BEGIN@300 at line 4
use strict;
# spent 43µs making 1 call to Tie::Array::BEGIN@4 # spent 29µs making 1 call to strict::import
52938µs2115µs
# spent 63µs (11+52) within Tie::Array::BEGIN@5 which was called: # once (11µs+52µs) by YAML::PP::Preserve::Array::BEGIN@300 at line 5
use Carp;
# spent 63µs making 1 call to Tie::Array::BEGIN@5 # spent 52µs making 1 call to Exporter::import
611µsour $VERSION = '1.07';
7
8# Pod documentation after __END__ below.
9
10sub DESTROY { }
11sub EXTEND { }
12sub UNSHIFT { scalar shift->SPLICE(0,0,@_) }
13sub SHIFT { shift->SPLICE(0,1) }
14sub CLEAR { shift->STORESIZE(0) }
15
16sub PUSH
17{
18 my $obj = shift;
19 my $i = $obj->FETCHSIZE;
20 $obj->STORE($i++, shift) while (@_);
21}
22
23sub POP
24{
25 my $obj = shift;
26 my $newsize = $obj->FETCHSIZE - 1;
27 my $val;
28 if ($newsize >= 0)
29 {
30 $val = $obj->FETCH($newsize);
31 $obj->STORESIZE($newsize);
32 }
33 $val;
34}
35
36sub SPLICE {
37 my $obj = shift;
38 my $sz = $obj->FETCHSIZE;
39 my $off = (@_) ? shift : 0;
40 $off += $sz if ($off < 0);
41 my $len = (@_) ? shift : $sz - $off;
42 $len += $sz - $off if $len < 0;
43 my @result;
44 for (my $i = 0; $i < $len; $i++) {
45 push(@result,$obj->FETCH($off+$i));
46 }
47 $off = $sz if $off > $sz;
48 $len -= $off + $len - $sz if $off + $len > $sz;
49 if (@_ > $len) {
50 # Move items up to make room
51 my $d = @_ - $len;
52 my $e = $off+$len;
53 $obj->EXTEND($sz+$d);
54 for (my $i=$sz-1; $i >= $e; $i--) {
55 my $val = $obj->FETCH($i);
56 $obj->STORE($i+$d,$val);
57 }
58 }
59 elsif (@_ < $len) {
60 # Move items down to close the gap
61 my $d = $len - @_;
62 my $e = $off+$len;
63 for (my $i=$off+$len; $i < $sz; $i++) {
64 my $val = $obj->FETCH($i);
65 $obj->STORE($i-$d,$val);
66 }
67 $obj->STORESIZE($sz-$d);
68 }
69 for (my $i=0; $i < @_; $i++) {
70 $obj->STORE($off+$i,$_[$i]);
71 }
72 return wantarray ? @result : pop @result;
73}
74
75sub EXISTS {
76 my $pkg = ref $_[0];
77 croak "$pkg doesn't define an EXISTS method";
78}
79
80sub DELETE {
81 my $pkg = ref $_[0];
82 croak "$pkg doesn't define a DELETE method";
83}
84
85package Tie::StdArray;
86117µsour @ISA = 'Tie::Array';
87
88sub TIEARRAY { bless [], $_[0] }
89sub FETCHSIZE { scalar @{$_[0]} }
90sub STORESIZE { $#{$_[0]} = $_[1]-1 }
91sub STORE { $_[0]->[$_[1]] = $_[2] }
92sub FETCH { $_[0]->[$_[1]] }
93sub CLEAR { @{$_[0]} = () }
94sub POP { pop(@{$_[0]}) }
95sub PUSH { my $o = shift; push(@$o,@_) }
96sub SHIFT { shift(@{$_[0]}) }
97sub UNSHIFT { my $o = shift; unshift(@$o,@_) }
98sub EXISTS { exists $_[0]->[$_[1]] }
99sub DELETE { delete $_[0]->[$_[1]] }
100
101sub SPLICE
102{
103 my $ob = shift;
104 my $sz = $ob->FETCHSIZE;
105 my $off = @_ ? shift : 0;
106 $off += $sz if $off < 0;
107 my $len = @_ ? shift : $sz-$off;
108 return splice(@$ob,$off,$len,@_);
109}
110
11117µs1;
112
113__END__