File Coverage

lib/Class/STL/ClassMembers.pm
Criterion Covered Total %
statement 1393 2055 67.7
branch 348 718 48.4
condition 136 327 41.5
subroutine 329 508 64.7
pod 0 40 0.0
total 2206 3648 60.4


line stmt bran cond sub pod time code
1             # vim:ts=4 sw=4
2             # ----------------------------------------------------------------------------------------------------
3             # Name : Class::STL::ClassMembers.pm
4             # Created : 27 April 2006
5             # Author : Mario Gaffiero (gaffie)
6             #
7             # Copyright 2006-2007 Mario Gaffiero.
8             #
9             # This file is part of Class::STL::Containers(TM).
10             #
11             # Class::STL::Containers is free software; you can redistribute it and/or modify
12             # it under the terms of the GNU General Public License as published by
13             # the Free Software Foundation; version 2 of the License.
14             #
15             # Class::STL::Containers is distributed in the hope that it will be useful,
16             # but WITHOUT ANY WARRANTY; without even the implied warranty of
17             # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18             # GNU General Public License for more details.
19             #
20             # You should have received a copy of the GNU General Public License
21             # along with Class::STL::Containers; if not, write to the Free Software
22             # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23             # ----------------------------------------------------------------------------------------------------
24             # Modification History
25             # When Version Who What
26             # ----------------------------------------------------------------------------------------------------
27             # TO DO:
28             # ----------------------------------------------------------------------------------------------------
29             require 5.005_62;
30 12     12   76 use strict;
  12         21  
  12         1101  
31 12     12   62 use warnings;
  12         22  
  12         1221  
32 12     12   64 use vars qw($VERSION $BUILD);
  12         21  
  12         990  
33             $VERSION = '0.27';
34             # ----------------------------------------------------------------------------------------------------
35             {
36             package Class::STL::ClassMembers;
37 12     12   3026 use UNIVERSAL;
  12         87  
  12         605  
38 12     12   232 use Carp qw(confess);
  12         27  
  12         843  
39 12     12   2693 use Class::STL::Trace;
  12         34  
  12         655  
40             sub import
41             {
42 214     214   12009 my $proto = shift;
43 214   33     817 my $class = ref($proto) || $proto;
44 214         391 my $self = {};
45 214         374 bless($self, $class);
46 214         938 $self->_caller((caller())[0]);
47 214         830 $self->_trace(Class::STL::Trace->new(debug_on => 0));
48 214         432 $self->{MEMBERS} = { };
49 214   100     2443 $self->_members(grep(!ref($_) || (ref($_) && !$_->isa('Class::STL::ClassMembers::FunctionMember::Abstract')), @_));
50 214         576 $self->_code([]);
51 214   100     317 push(@{$self->_code()},
  214         360  
52             map($_->code($self->_caller()),
53             grep(ref($_) && $_->isa('Class::STL::ClassMembers::FunctionMember::Abstract'), @_)));
54 214         589 $self->_prepare();
55 214         14112 return $self;
56             }
57             sub memlist
58             {
59 0     0 0 0 my $self = shift;
60 0         0 return values(%{$self->_members()});
  0         0  
61             }
62             # ----------------------------------------------------------------------------------------------------
63             # PRIVATE
64             # ----------------------------------------------------------------------------------------------------
65             sub _prepare
66             {
67 214     214   294 my $self = shift;
68 214         508 $self->code_members_access();
69 214         537 $self->code_members_init();
70 214         483 $self->code_members_print();
71 214         472 $self->code_members_local();
72 214         477 $self->code_members_data();
73 214         524 $self->code_members();
74 214         492 $self->code_swap();
75 214         477 $self->code_clone();
76 214         488 $self->code_undefine();
77             #< $self->code_factory();
78            
79 214         297 unshift(@{$self->_code()}, "{\npackage @{[ $self->_caller() ]};\n");
  214         383  
  214         406  
80 214         408 push(@{$self->_code()}, "}\n");
  214         396  
81            
82 214 50       417 $self->_trace()->print($self->_caller(), join("", @{$self->_code()})) if ($self->_trace()->debug_on());
  0         0  
83 12 0 66 12 0 69 eval(join("", @{$self->_code()}));
  12 100 0 12 0 28  
  12 50 66 12 0 1696  
  12 0 0 12 0 73  
  12 100 66 12 0 21  
  12 50 0 12 0 2981  
  12 0 66 12 0 77  
  12 100 0 12 0 36  
  12 50 66 11 0 1340  
  12 0 0 11 0 77  
  12 0 66 10 0 22  
  12 0 66 10 0 1151  
  12 0 100 10 0 65  
  12 0 66 10 0 19  
  12 0 66 9 0 1343  
  12 0 66 9 0 66  
  12 0 0 9 0 27  
  12 0 66 9 0 955  
  12 0 66 9 0 69  
  12 0 0 9 0 17  
  12 0 66 9 0 1255  
  12 0 0 9 0 103  
  12 0 66 9 0 24  
  12 0 0 9 0 2372  
  11 0 66 9 0 72  
  11 0 0 9 0 21  
  11 0 66 9 0 1829  
  11 0 0 9 0 63  
  11 0 66 9 0 26  
  11 0 0 9 0 2242  
  10 0 66 9   58  
  10 0 0 7   15  
  10 0 0 7   940  
  10 0 0 7   62  
  10 0 100 7   18  
  10 0 0 7   1120  
  10 100 66 7   70  
  10 50 100 7   16  
  10 0 0 7   963  
  10 100 66 7   57  
  10 50 33 7   16  
  10 50 66 7   1204  
  9 100 66 7   56  
  9 50 100 7   17  
  9 50 100 7   957  
  9 50 100 7   52  
  9 0 100 7   17  
  9 100 100 7   1408  
  9 100 100 7   59  
  9 0 0 7   17  
  9 0 66 7   1420  
  9 50 100 7   56  
  9 50 100 7   16  
  9 50 100 7   1147  
  9 50 100 7   51  
  9 50 100 7   16  
  9 50 66 7   1173  
  9 50 100 7   55  
  9 50 100 7   16  
  9 0 0 7   1319  
  9 0 33 7   60  
  9 50 66 7   19  
  9 0 66 7   3284  
  9 50 0 7   67  
  9 50 33 7   16  
  9 0 33 7   952  
  9 50 0 7   53  
  9 0 0 7   17  
  9 50 0 7   1347  
  9 50 0 7   54  
  9 0 0 7   15  
  9 100 0 7   1365  
  9 50 0 7   53  
  9 50 0 7   17  
  9 100 0 7   1009  
  9 100 0 7   53  
  9 100 0 7   17  
  9 100 0 7   1421  
  9 100 0 7   60  
  9 50 0 7   18  
  9 0 0 7   1266  
  9 50 50 7   53  
  9 100 0 7   18  
  9 100 0 7   1248  
  9 50 0 7   54  
  9 100 0 7   18  
  9 50 0 7   2153  
  9 0 0 7   54  
  9 100 0 7   27  
  9 50 0 7   901  
  9 0 0 7   52  
  9 100 0 7   18  
  9 50 66 7   991  
  7 0 0 7   43  
  7 100 66 7   15  
  7 50 0 7   735  
  7 0 66 7   58  
  7 100 0 7   25  
  7 50 66 7   650  
  7 0 0 7   43  
  7 100 66 7   15  
  7 50 0 7   773  
  7 0 66 7   51  
  7 100 0 7   14  
  7 50 0 7   912  
  7 0 66 7   58  
  7 0 66 7   20  
  7 0 0 7   564  
  7 50 66 7   52  
  7 50 0 7   18  
  7 50 66 7   683  
  7 50 0 7   46  
  7 50 66 7   14  
  7 50 66 7   538  
  7 50   7   51  
  7 50   7   35  
  7 50   7   558  
  7 50   7   47  
  7 50   7   15  
  7 50   7   734  
  7 50   7   41  
  7 50   7   16  
  7 0   7   935  
  7 0   7   44  
  7 50   7   14  
  7 50   7   577  
  7 50   7   41  
  7 50   7   17  
  7 100   7   614  
  7 100   7   41  
  7 50   7   12  
  7 50   7   471  
  7 0   7   38  
  7 0   7   12  
  7 50   7   543  
  7 50   7   42  
  7 50   7   11  
  7 50   7   783  
  7 50   7   44  
  7 50   7   13  
  7 100   7   1179  
  7 100   7   43  
  7 50   7   12  
  7 50   7   1061  
  7 50   7   51  
  7 50   7   13  
  7 50   7   1987  
  7 50   7   60  
  7 50   7   28  
  7 50   7   637  
  7 50   7   95  
  7 50   7   12  
  7 50   7   890  
  7 50   7   63  
  7 50   7   39  
  7 50   7   757  
  7 0   7   45  
  7 0   7   11  
  7 100   7   574  
  7 100   7   42  
  7 50   7   19  
  7 50   7   793  
  7 50   7   47  
  7 50   7   28  
  7 0   7   896  
  7 0   7   43  
  7 100   7   13  
  7 50   7   561  
  7 100   7   40  
  7 50   7   12  
  7 50   7   659  
  7 50   7   44  
  7 100   7   16  
  7 50   7   532  
  7 0   7   39  
  7 0   7   14  
  7 100   7   525  
  7 50   7   41  
  7 100   7   14  
  7 100   7   798  
  7 100   7   49  
  7 50   7   14  
  7 100   7   948  
  7 100   7   62  
  7 100   7   15  
  7 100   7   684  
  7 100   7   49  
  7 100   7   28  
  7 50   7   668  
  7 100   7   766  
  7 50   7   29  
  7 50   7   530  
  7 100   5   39  
  7 50   5   15  
  7 100   5   526  
  7 100   5   41  
  7 100   5   12  
  7 100   5   720  
  7 100   5   42  
  7 100   278   14  
  7 100   224   865  
  7 100   36   43  
  7 100   0   10  
  7 100   0   582  
  7 100   0   54  
  7 100   0   13  
  7 100   0   669  
  7 0   0   43  
  7 0   0   13  
  7 100   0   493  
  7 100   0   42  
  7 50   0   12  
  7 100   0   548  
  7 100   0   40  
  7 100   0   13  
  7 100   0   757  
  7 100   0   44  
  7 100   0   15  
  7 100   0   920  
  7 100   0   41  
  7 100   0   19  
  7 100   0   513  
  7 100   0   41  
  7 100   0   11  
  7 100   0   644  
  7 100   0   54  
  7 100   0   11  
  7 100   0   536  
  7 100   0   40  
  7 100   0   26  
  7 50   240   529  
  7 100   32792   37  
  7 100   11   15  
  7 100   113   676  
  7 100   0   49  
  7 100   161   27  
  7 100   14   1106  
  7 100   0   44  
  7 50   54   11  
  7 50   353   1576  
  7 50   0   42  
  7 50   0   14  
  7 50   9   598  
  7 50   2   316  
  7 50   1   20  
  7 50   176   673  
  7 100   1   48  
  7 100   1   15  
  7 0   1   570  
  7 0   1   40  
  7 0   0   12  
  7 0   0   551  
  7 0   118   37  
  7 0   0   13  
  7 0   8   740  
  7 0   16   43  
  7 50   0   15  
  7 50   75   872  
  7 50   0   41  
  7 50   66   13  
  7 50   1   642  
  7 50   24   40  
  7 50   713   16  
  7 0   39585   601  
  7 0   4734   42  
  7 0   313   12  
  7 0   566   484  
  7 0   78   43  
  7 0   76   13  
  7 0   92   603  
  7 0   87   45  
  7 0   36   12  
  7 0   0   731  
  7 0   6   42  
  7 0   22   14  
  7 0   4   861  
  7 0   270   42  
  7 0   273   12  
  7 0   22   544  
  7 0   98   63  
  7 0   0   22  
  7 0   43   659  
  7 0   45   42  
  7 0   293   16  
  7 0   201   536  
  7 0   0   43  
  7 0   21   14  
  7 0   15   551  
  7 0   117   41  
  7 0   679   13  
  7 0   43   808  
  7 100   26   43  
  7 50   270   37  
  7 0   265   926  
  7 100   32   44  
  7 100   21   15  
  7 50   35   579  
  7 100   0   37  
  7 100   168   16  
  7 50   35   595  
  7 100   255   43  
  7 100   0   13  
  7 50   54   515  
  7 100   0   37  
  7 100   22   17  
  7 50   591   518  
  7 0   0   53  
  7 100   146   31  
  7 50   45   716  
  7 0   9   42  
  7 0   10   30  
  7 50   9   864  
  7 100   425   43  
  7 50   129   16  
  7 0   19   577  
  7 100   72   41  
  7 50   399   18  
  7 50   0   670  
  7 0   129   39  
  7 50   1636   16  
  7 100   33   498  
  7 50   798   47  
  7 0   58   14  
  7 0   256   556  
  7 0   24   40  
  7 0   79   15  
  7 0   1338   780  
  7 50   0   46  
  7 0   21   14  
  7 0   102   950  
  7 0   74   45  
  7 0   0   24  
  7 50   1   574  
  7 50   5   43  
  7 50   0   29  
  7 50   0   702  
  7 0   0   45  
  7 0   0   16  
  7 0   0   544  
  7 0   0   66  
  7 0   0   37  
  7 0   0   604  
  7 50   0   52  
  7 0   0   15  
  7 0   0   774  
  7 50   0   53  
  7     0   23  
  7     0   1650  
  7     0   46  
  7     0   14  
  7     0   578  
  7     0   45  
  7     0   13  
  7     0   694  
  7     0   49  
  7     0   18  
  7     0   578  
  7     0   49  
  7     0   29  
  7     0   603  
  7     0   43  
  7     0   17  
  7     0   794  
  7     0   47  
  7     0   16  
  7     0   1197  
  7     0   49  
  7     0   16  
  7     0   1590  
  7     0   46  
  7     0   15  
  7     0   682  
  7     0   50  
  7     0   15  
  7     0   719  
  7     0   52  
  7     0   29  
  7     0   595  
  7     2   44  
  7     0   14  
  7     0   674  
  7     0   46  
  7     0   15  
  7     0   758  
  7     0   45  
  7     0   14  
  7     0   949  
  7     0   46  
  7     0   14  
  7     0   652  
  7     1   49  
  7     0   15  
  7     0   697  
  7     0   61  
  7     0   23  
  7     0   560  
  7     0   68  
  7     0   16  
  7     0   575  
  7     0   44  
  7     0   14  
  7     0   810  
  7     0   48  
  7     0   16  
  7     0   1193  
  7     0   50  
  7     0   12  
  7     0   1638  
  7     0   46  
  7     0   15  
  7     0   685  
  7     0   43  
  7     0   16  
  7     0   853  
  7     0   46  
  7     0   12  
  7     0   622  
  7     0   41  
  7     91   15  
  7     70   617  
  7     16153   52  
  7     14   15  
  7     45   816  
  7     24   51  
  7     15   25  
  7     132   1119  
  7     868   45  
  7     48   15  
  7     0   1697  
  7     0   50  
  7     0   14  
  7     0   623  
  7     0   44  
  7     0   19  
  7     0   762  
  7     0   44  
  7     0   19  
  7     2   672  
  7     0   45  
  7     0   15  
  7     0   651  
  7     0   245  
  7     1   18  
  7     1   842  
  7     1   48  
  7     1   16  
  7     0   1126  
  7     0   48  
  7     0   15  
  7     0   1692  
  7     0   47  
  7     0   23  
  7     1   660  
  7     0   46  
  7     0   13  
  7     1   784  
  7     0   47  
  7     0   18  
  7     0   713  
  7     1   58  
  7     0   23  
  7     0   620  
  7     0   44  
  7     2   15  
  7     0   808  
  7     0   48  
  7     0   18  
  7     0   1170  
  7     0   48  
  7     0   16  
  7     0   1694  
  7     0   50  
  7     0   14  
  7     0   612  
  7     0   45  
  7     0   16  
  7     0   783  
  7     0   45  
  7     0   15  
  7     0   709  
  7     0   49  
  7     0   14  
  7     0   590  
  7     0   42  
  7     0   12  
  7         742  
  7         45  
  7         15  
  7         1436  
  7         48  
  7         16  
  7         1665  
  7         58  
  7         23  
  7         646  
  7         41  
  7         16  
  7         737  
  7         47  
  7         14  
  7         624  
  7         47  
  7         23  
  7         665  
  7         41  
  7         14  
  7         804  
  7         47  
  7         18  
  7         1079  
  7         45  
  7         15  
  7         1574  
  7         52  
  7         13  
  7         648  
  7         40  
  7         17  
  7         722  
  7         42  
  7         16  
  7         596  
  7         57  
  7         15  
  7         618  
  7         40  
  7         14  
  7         742  
  7         55  
  7         18  
  7         1140  
  7         47  
  7         15  
  7         1021  
  7         40  
  7         17  
  7         1896  
  7         62  
  7         22  
  7         680  
  7         57  
  7         23  
  7         773  
  7         54  
  7         16  
  7         782  
  7         43  
  7         14  
  7         632  
  7         47  
  7         15  
  7         790  
  7         43  
  7         15  
  7         1137  
  7         46  
  7         16  
  7         1039  
  7         57  
  7         16  
  7         1863  
  7         45  
  7         15  
  7         619  
  7         42  
  7         14  
  7         821  
  7         68  
  7         19  
  7         744  
  7         52  
  7         14  
  7         591  
  7         51  
  7         23  
  7         814  
  5         36  
  5         929  
  5         715  
  5         34  
  5         12  
  5         963  
  5         33  
  5         11  
  5         940  
  5         33  
  5         11  
  5         662  
  5         41  
  5         9  
  5         565  
  5         30  
  5         15  
  5         538  
  5         31  
  5         9  
  5         523  
  214         312  
  214         355  
  278         530  
  278         390  
  278         821  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  278         634  
  278         783  
  224         464  
  224         377  
  224         646  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  224         505  
  224         704  
  36         106  
  36         70  
  36         119  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  36         105  
  36         164  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  240         511  
  240         338  
  240         776  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  240         510  
  240         595  
  32792         67072  
  32792         42857  
  32792         77388  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  32792         57055  
  32792         192727  
  11         18  
  11         38  
  11         36  
  1         9  
  114         234  
  113         1995  
  113         261  
  113         215  
  122         1182  
  10         18  
  0         0  
  161         394  
  161         3539  
  161         656  
  161         476  
  161         3497  
  14         30  
  14         234  
  14         38  
  14         49  
  12         163  
  0         0  
  0         0  
  0         0  
  54         85  
  54         853  
  54         114  
  54         116  
  406         1139  
  353         8765  
  353         1438  
  341         1074  
  332         4661  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  9         22  
  9         202  
  9         148  
  2         4  
  2         34  
  2         8  
  2         15  
  0         0  
  1         5  
  1         67  
  1         6  
  0         0  
  176         532  
  176         4326  
  176         892  
  16         34  
  16         300  
  1         3  
  1         4  
  1         35  
  1         12  
  1         4  
  1         31  
  1         6  
  1         35  
  1         24  
  1         4  
  1         36  
  1         24  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  118         221  
  118         2698  
  118         333  
  118         287  
  118         778  
  0         0  
  0         0  
  0         0  
  8         23  
  8         166  
  8         85  
  16         43  
  16         385  
  16         158  
  0         0  
  0         0  
  0         0  
  75         128  
  75         1235  
  75         306  
  67         130  
  67         1070  
  1         3  
  1         2  
  1         2  
  67         131  
  66         1084  
  66         244  
  0         0  
  1         4  
  1         35  
  1         8  
  24         231  
  24         41  
  24         86  
  0         0  
  3         8  
  3         86  
  3         9  
  10         30  
  34         303  
  31         319  
  717         1404  
  717         1074  
  711         1750  
  1         36  
  1         6  
  1         5  
  1         7  
  1         4  
  711         1362  
  711         2416  
  39590         84304  
  39615         54206  
  39615         87304  
  116         387  
  90         215  
  90         280  
  87         140  
  87         560  
  39488         67075  
  39615         341961  
  4770         8591  
  4744         6657  
  4741         13595  
  8         11  
  8         18  
  0         0  
  0         0  
  0         0  
  0         0  
  4733         17305  
  4733         12487  
  4741         40094  
  295         536  
  295         440  
  287         793  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  287         630  
  287         679  
  555         1115  
  555         807  
  555         1584  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  555         1188  
  555         11089  
  70         112  
  70         112  
  70         212  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  70         178  
  70         227  
  76         204  
  76         146  
  76         262  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  76         197  
  76         393  
  92         212  
  92         133  
  92         230  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  92         183  
  92         574  
  87         669  
  87         132  
  87         250  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  87         204  
  87         629  
  36         56  
  36         46  
  36         73  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  36         55  
  36         92  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         8  
  6         13  
  6         75  
  22         32  
  22         323  
  22         330  
  4         11  
  4         84  
  4         32  
  270         668  
  270         5686  
  270         6526  
  273         911  
  273         5754  
  273         6538  
  22         65  
  22         70  
  22         529  
  98         222  
  98         1869  
  98         1414  
  0         0  
  0         0  
  0         0  
  43         69  
  43         625  
  43         414  
  45         92  
  45         801  
  45         1065  
  293         716  
  293         5740  
  293         3420  
  201         319  
  201         366  
  201         2865  
  0         0  
  0         0  
  0         0  
  21         30  
  21         283  
  21         331  
  15         29  
  15         282  
  15         323  
  117         191  
  117         1803  
  117         1545  
  679         1710  
  679         1869  
  679         13794  
  43         65  
  43         609  
  43         279  
  26         48  
  26         423  
  26         341  
  270         646  
  270         5742  
  270         3534  
  265         604  
  265         5441  
  265         6402  
  32         49  
  32         443  
  32         517  
  21         33  
  21         281  
  21         336  
  35         60  
  35         527  
  35         631  
  0         0  
  0         0  
  0         0  
  168         293  
  168         999  
  168         2825  
  35         57  
  35         555  
  35         678  
  255         680  
  255         5367  
  255         6968  
  0         0  
  0         0  
  0         0  
  54         122  
  54         195  
  34         520  
  54         96  
  54         113  
  98         123  
  98         225  
  54         122  
  54         247  
  24         96  
  24         218  
  24         149  
  18         52  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  22         53  
  22         183  
  13         237  
  10         26  
  10         31  
  10         18  
  10         36  
  10         41  
  10         51  
  10         163  
  585         958  
  585         3743  
  246         4105  
  234         277  
  234         362  
  225         257  
  371         800  
  380         1046  
  356         2761  
  423         3748  
  200         505  
  128         198  
  173         453  
  200         540  
  147         433  
  147         335  
  69         181  
  69         1141  
  32         76  
  9         79  
  6         98  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         31  
  10         66  
  9         250  
  10         31  
  10         29  
  28         55  
  28         92  
  10         34  
  10         30  
  19         136  
  9         59  
  4         99  
  9         21  
  9         26  
  7         13  
  7         27  
  9         23  
  9         125  
  426         950  
  426         1306  
  108         2132  
  442         781  
  442         1579  
  282         1890  
  268         714  
  371         877  
  364         903  
  357         919  
  44         99  
  43         132  
  43         118  
  44         89  
  44         139  
  112         248  
  73         253  
  45         697  
  45         91  
  45         117  
  99         145  
  99         263  
  44         122  
  44         128  
  425         817  
  399         998  
  76         1332  
  399         579  
  399         718  
  270         347  
  270         616  
  399         756  
  399         1195  
  331         5406  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  129         223  
  129         717  
  116         2143  
  1636         3738  
  1636         5045  
  420         6577  
  1562         2601  
  1562         3136  
  1209         1862  
  1209         3578  
  1562         3467  
  1562         5470  
  1562         27631  
  33         76  
  33         134  
  12         291  
  831         1917  
  831         4310  
  873         16913  
  847         2237  
  803         2144  
  490         1076  
  475         1907  
  788         1668  
  788         2513  
  788         2118  
  62         130  
  61         242  
  32         436  
  316         598  
  313         1654  
  195         2034  
  168         338  
  154         351  
  99         331  
  65         221  
  120         255  
  120         1423  
  44         298  
  33         100  
  33         198  
  24         378  
  112         321  
  103         386  
  84         1102  
  47         114  
  47         99  
  63         140  
  57         289  
  23         47  
  23         132  
  15         239  
  1338         3238  
  1338         16065  
  891         18889  
  9         19  
  9         45  
  7         13  
  28         106  
  30         115  
  9         65  
  129         375  
  123         691  
  117         1889  
  93         312  
  93         289  
  385         646  
  385         1019  
  93         377  
  93         410  
  95         289  
  74         446  
  73         1566  
  2         4  
  2         6  
  2         3  
  2         6  
  2         5  
  2         8  
  2         7  
  2         34  
  0         0  
  0         0  
  1         4  
  1         7  
  0         0  
  1         4  
  1         4  
  2         6  
  2         9  
  1         6  
  1         9  
  1         9  
  5         10  
  5         12  
  0         0  
  5         7  
  5         9  
  11         12  
  11         27  
  5         12  
  5         20  
  5         36  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         19  
  2         9  
  2         5  
  2         4  
  2         5  
  2         4  
  2         4  
  2         4  
  2         4  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         2  
  1         5  
  1         13  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  91         204  
  91         144  
  91         280  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  91         210  
  91         276  
  70         167  
  70         147  
  107         395  
  37         47  
  37         130  
  2         4  
  2         2  
  2         6  
  70         185  
  70         216  
  16190         27842  
  16190         22480  
  16175         36019  
  24         39  
  24         90  
  2         3  
  2         3  
  2         5  
  16153         28442  
  16153         89447  
  36         64  
  36         186  
  27         163  
  15         29  
  15         59  
  0         0  
  0         0  
  0         0  
  14         39  
  14         106  
  21         63  
  21         299  
  40         91  
  32         51  
  32         106  
  0         0  
  0         0  
  0         0  
  8         18  
  8         19  
  32         75  
  32         261  
  16         36  
  16         37  
  16         62  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  16         45  
  16         341  
  5         7  
  5         6  
  5         11  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  100         191  
  105         175  
  105         295  
  5         16  
  0         0  
  0         0  
  0         0  
  0         0  
  100         226  
  100         346  
  852         1729  
  852         1129  
  852         1993  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  852         1511  
  852         2370  
  43         86  
  43         90  
  43         155  
  17         59  
  17         51  
  17         49  
  17         51  
  17         50  
  0         0  
  26         127  
  26         66  
  26         72  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         6  
  2         3  
  2         38  
  2         7  
  2         6  
  2         7  
  2         10  
  2         21  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         3  
  1         1  
  1         14  
  1         34  
  0         0  
  0         0  
  0         0  
  0         0  
  1         3  
  1         2  
  1         16  
  1         33  
  1         6  
  1         5  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         3  
  1         22  
  1         22  
  0         0  
  0         0  
  1         3  
  1         4  
  1         13  
  1         4  
  1         3  
  1         3  
  1         2  
  1         5  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         2  
  1         2  
  1         5  
  1         24  
  1         5  
  1         4  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         5  
  1         2  
  1         5  
  1         23  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         3  
  1         3  
  1         4  
  1         7  
  1         6  
  1         4  
  1         5  
  1         4  
  0         0  
  2         5  
  2         6  
  3         10  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
84 214 50       839 confess "**Error in eval for @{[ $self->_caller() ]} ClassMembers functions creation:\n$@" if ($@);
  0         0  
85             }
86             sub _code
87             {
88 3000     3000   3930 my $self = shift;
89 3000 100       5160 $self->{CODE} = shift if (@_);
90 3000         26899 return $self->{CODE};
91             }
92             sub _trace
93             {
94 428     428   614 my $self = shift;
95 428 100       844 $self->{_TRACE} = shift if (@_);
96 428         924 return $self->{_TRACE};
97             }
98             sub _caller
99             {
100 593     593   814 my $self = shift;
101 593 100       1339 $self->{CALLER} = shift if (@_);
102 593         1831 return $self->{CALLER};
103             }
104             sub _caller_str
105             {
106 0     0   0 my $self = shift;
107 0         0 my $str = $self->_caller();
108 0         0 $str =~ s/[:]+/_/g;
109 20         38 return $str;
110             }
111             sub _members
112             {
113 3358     3358   6847 my $self = shift;
114 3358         6597 foreach (@_) {
115 220 100       2091 my $m = ref($_) ? $_
116             : Class::STL::ClassMembers::DataMember->new(name => $_, _caller => $self->_caller());
117 220         511 $self->{MEMBERS}->{$m->name()} = $m;
118             }
119 3338         10758 return $self->{MEMBERS};
120             }
121             #> sub code_get_set
122             #> {
123             #> #TODO: get() -- returns array with mebers' values
124             #> # set(, , ...) -- sets member(s) value(s)
125             #> }
126             sub code_members_access
127             {
128 214     216 0 280 my $self = shift;
129 214         306 map(push(@{$self->_code()}, $_->code_memaccess($_)), values(%{$self->_members()}));
  238         441  
  234         591  
130 216         381 return;
131             }
132             sub code_members_init
133             {
134 216     214 0 328 my $self = shift;
135 216         352 my $tab = ' ' x 4;
136 214         303 my $code = "sub members_init {\n"; # --> BUILDALL
137 214         502 $code .= "${tab}my \$self = shift;\n";
138 214         388 $code .= "${tab}use vars qw(\@ISA);\n";
139 214         403 $code .= "${tab}if (int(\@ISA) && (caller())[0] ne __PACKAGE__) {\n";
140 214         436 $code .= "${tab}${tab}\$self->SUPER::members_init(\@_);\n";
141 216         339 $code .= "${tab}}\n";
142 216 100       287 if (keys(%{$self->_members()})) {
  214         402  
143 123         282 $code .= "${tab}my \@p;\n";
144 123         1975 $code .= "${tab}while (\@_) { my \$p=shift; push(\@p, \$p, shift) if (!ref(\$p)); }\n";
145 123         244 $code .= "${tab}my \%p = \@p;\n";
146 123         192 $code .= "${tab}@{[ join(\"\n \", map($_->code_meminit(), values( %{$self->_members()} ))) ]}\n";
  123         168  
  123         226  
147             }
148 214         420 $code .= "}\n";
149 214         303 push(@{$self->_code()}, $code);
  214         433  
150 214         355 return;
151             }
152             sub code_members_print
153             {
154 214     214 0 307 my $self = shift;
155 214         319 my $tab = ' ' x 4;
156 214         338 my $code = "sub members_print {\n";
157 214         374 $code .= "${tab}my \$self = shift;\n";
158 214         351 $code .= "${tab}my \$delim = shift || '|';\n";
159 214 100       285 if (keys(%{$self->_members()})) {
  214         384  
160 123         260 $code .= "${tab}return join(\"\$delim\",\n${tab}${tab}";
161             $code .=
162             join(qq/,\n$tab$tab/,
163             map
164             (
165             qq/"$_=\@{[ defined(\$self->$_()) ? \$self->$_() : 'NULL' ]}"/,
166 123         230 sort(keys(%{$self->_members()}))
  123         223  
167             )
168             );
169 123         314 $code .= "\n${tab});\n";
170             } else {
171 91         167 $code .= "${tab}return '';\n";
172             }
173 214         340 $code .= "}\n";
174 214         276 push(@{$self->_code()}, $code);
  214         382  
175 214         369 return;
176             }
177             sub code_members_local
178             {
179 214     214 0 298 my $self = shift;
180 214         307 my $tab = ' ' x 4;
181 214         299 my $code = "sub members_local { # static function\n";
182 214 100       264 if (keys(%{$self->_members()})) {
  214         359  
183 123         270 $code .= "${tab}return {\n${tab}${tab}";
184 123         234 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  123         229  
185 123         291 $code .= "\n${tab}};\n";
186             } else {
187 91         164 $code .= "${tab}return {};\n";
188             }
189 214         321 $code .= "}\n";
190 214         287 push(@{$self->_code()}, $code);
  214         380  
191 214         371 return;
192             }
193             sub code_members_data
194             {
195 214     214 0 287 my $self = shift;
196 214         312 my $tab = ' ' x 4;
197 214         302 my $code = "sub memdata {\n";
198 214         355 $code .= "${tab}my \$self = shift;\n";
199 214         346 $code .= "${tab}use vars qw(\@ISA);\n";
200 214         329 $code .= "${tab}my \$super = (int(\@ISA))";
201 214         312 $code .= " ? \$self->SUPER::memdata() : {};\n";
202 214 100       259 if (keys(%{$self->_members()})) {
  214         394  
203 123         256 $code .= "${tab}return {\n${tab}${tab}";
204 123         226 $code .= "\%\$super,\n${tab}${tab}";
205 123         201 $code .= join(",\n${tab}${tab}", map($_->code_memdata(), values(%{$self->_members()})));
  123         217  
206 123         268 $code .= "\n${tab}};\n";
207             } else {
208 91         163 $code .= "${tab}return {\%\$super};\n";
209             }
210 214         344 $code .= "}\n";
211 214         269 push(@{$self->_code()}, $code);
  214         397  
212 214         362 return;
213             }
214             sub code_members
215             {
216 214     214 0 314 my $self = shift;
217 214         305 my $tab = ' ' x 4;
218 214         292 my $code = "sub members {\n";
219 214         348 $code .= "${tab}my \$self = shift;\n";
220 214         330 $code .= "${tab}use vars qw(\@ISA);\n";
221 214         343 $code .= "${tab}my \$super = (int(\@ISA))";
222 214         306 $code .= " ? \$self->SUPER::members() : {};\n";
223 214         453 $code .= "${tab}return keys(\%\$super)\n${tab}? {\n${tab}${tab}";
224 214         349 $code .= "\%\$super,\n${tab}${tab}";
225 214         360 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  214         387  
226 214         413 $code .= "\n${tab}}\n";
227 214         364 $code .= "${tab}: {\n${tab}${tab}";
228 214         351 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  214         397  
229 214         416 $code .= "\n${tab}};\n";
230 214         324 $code .= "}\n";
231 214         276 push(@{$self->_code()}, $code);
  214         389  
232 214         416 return;
233             }
234             sub code_swap
235             {
236 214     214 0 288 my $self = shift;
237 214         308 my $tab = ' ' x 4;
238 214         310 my $code = "sub swap {\n";
239 214         444 $code .= "${tab}my \$self = shift;\n";
240 214         388 $code .= "${tab}my \$other = shift;\n";
241 214         376 $code .= "${tab}use vars qw(\@ISA);\n";
242 214         407 $code .= "${tab}my \$tmp = \$self->clone();\n";
243 214         389 $code .= "${tab}\$self->SUPER\::swap(\$other) if (int(\@ISA));\n";
244 214 100       275 if (keys(%{$self->_members()})) {
  214         374  
245 123         188 $code .= "${tab}@{[ join(qq#\n${tab}#,
246 123         195 map(qq#\$self->$_(\$other->$_());#, keys( %{$self->_members()} ) )) ]}\n";
  123         211  
247 123         285 $code .= "${tab}@{[ join(qq#\n${tab}#,
248 123         209 map(qq#\$other->$_(\$tmp->$_());#, keys( %{$self->_members()} ) )) ]}\n";
  123         227  
249             }
250 214         494 $code .= "}\n";
251 214         275 push(@{$self->_code()}, $code);
  214         382  
252 214         349 return;
253             }
254             sub code_clone
255             {
256 214     214 0 287 my $self = shift;
257 214         313 my $tab = ' ' x 4;
258 214         301 my $code = "sub _clone {\n";
259 214         365 $code .= "${tab}my \$self = shift;\n";
260 214         369 $code .= "${tab}use vars qw(\@ISA);\n";
261 214         339 $code .= "${tab}my \$clone = int(\@ISA) ? \$self->SUPER\::_clone() : \$self->_new();\n";
262 214 100       273 if (keys(%{$self->_members()})) {
  214         373  
263 123         184 $code .= "${tab}@{[ join(qq#\n${tab}#,
264 123         196 map(qq#\$clone->$_(\$self->$_());#, keys( %{$self->_members()} ) )) ]}\n";
  123         199  
265             }
266 214         457 $code .= "${tab}return \$clone;\n";
267 214         293 $code .= "}\n";
268 214         271 $code .= "sub clone {\n";
269 214         312 $code .= "${tab}my \$self = shift;\n";
270 214         314 $code .= "${tab}use vars qw(\@ISA);\n";
271 214         340 $code .= "${tab}my \$clone = int(\@ISA) ? \$self->SUPER\::clone() : \$self->new();\n";
272 214 100       290 if (keys(%{$self->_members()})) {
  214         351  
273 123         178 $code .= "${tab}@{[ join(qq#\n${tab}#,
274 123         209 map(qq#\$clone->$_(\$self->$_());#, keys( %{$self->_members()} ) )) ]}\n";
  123         210  
275             }
276 214         486 $code .= "${tab}return \$clone;\n";
277 214         318 $code .= "}\n";
278 214         267 push(@{$self->_code()}, $code);
  214         369  
279 214         400 return;
280             }
281             sub code_undefine
282             {
283 214     214 0 290 my $self = shift;
284 214         303 my $tab = ' ' x 4;
285             #< my $c = $self->_caller_str();
286 214         393 my $code = "sub undefine {\n${tab}my \$self = shift;\n";
287 214         452 $code .= "${tab}map(\$self->{\"\@{[ uc(\$_) ]}\"} = undef, \@_);\n";
288 214         358 $code .= "}\n";
289 214         304 push(@{$self->_code()}, $code);
  214         388  
290 214         358 return;
291             }
292             #? sub code_factory
293             #? {
294             #? my $self = shift;
295             #? return unless exists ${$self->_members()}{'element_type'};
296             #? my $m = $self->_members()->{'element_type'};
297             #? my $tab = ' ' x 4;
298             #? my $code = "sub factory {\n";
299             #? $code .= "${tab}my \$self = shift;\n";
300             #? $code .= "${tab}return @{[ $m->default() ]}->new(\@_);\n";
301             #? $code .= "}\n";
302             #? push(@{$self->_code()}, $code);
303             #? return;
304             #? }
305             }
306             # ----------------------------------------------------------------------------------------------------
307             1;