File Coverage

lib/Class/STL/ClassMembers.pm
Criterion Covered Total %
statement 1145 2055 55.7
branch 214 718 29.8
condition 84 327 25.6
subroutine 272 508 53.5
pod 0 40 0.0
total 1715 3648 47.0


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   69 use strict;
  12         22  
  12         1655  
31 12     12   69 use warnings;
  12         19  
  12         1888  
32 12     12   62 use vars qw($VERSION $BUILD);
  12         24  
  12         1389  
33             $VERSION = '0.26';
34             $BUILD = 'Monday May 15 23:08:34 GMT 2006';
35             # ----------------------------------------------------------------------------------------------------
36             {
37             package Class::STL::ClassMembers;
38 12     12   7415 use UNIVERSAL qw(isa can);
  12         102  
  12         829  
39 12     12   6788 use Carp qw(confess);
  12         30  
  12         1154  
40 12     12   5140 use Class::STL::Trace;
  12         33  
  12         1159  
41             sub import
42             {
43 214     214   33556 my $proto = shift;
44 214   33     1618 my $class = ref($proto) || $proto;
45 214         491 my $self = {};
46 214         12917 bless($self, $class);
47 214         1364 $self->_caller((caller())[0]);
48 214         1528 $self->_trace(Class::STL::Trace->new(debug_on => 0));
49 214         602 $self->{MEMBERS} = { };
50 214   66     1914 $self->_members(grep(!ref($_) || (ref($_) && !$_->isa('Class::STL::ClassMembers::FunctionMember::Abstract')), @_));
51 214         1092 $self->_code([]);
52 214   100     650 push(@{$self->_code()},
  214         554  
53             map($_->code($self->_caller()),
54             grep(ref($_) && $_->isa('Class::STL::ClassMembers::FunctionMember::Abstract'), @_)));
55 214         832 $self->_prepare();
56 214         19854 return $self;
57             }
58             sub memlist
59             {
60 0     0 0 0 my $self = shift;
61 0         0 return values(%{$self->_members()});
  0         0  
62             }
63             # ----------------------------------------------------------------------------------------------------
64             # PRIVATE
65             # ----------------------------------------------------------------------------------------------------
66             sub _prepare
67             {
68 214     214   364 my $self = shift;
69 214         573 $self->code_members_access();
70 214         652 $self->code_members_init();
71 214         773 $self->code_members_print();
72 214         803 $self->code_members_local();
73 214         634 $self->code_members_data();
74 214         533 $self->code_members();
75 214         678 $self->code_swap();
76 214         691 $self->code_clone();
77 214         786 $self->code_undefine();
78             #< $self->code_factory();
79            
80 214         542 unshift(@{$self->_code()}, "{\npackage @{[ $self->_caller() ]};\n");
  214         538  
  214         791  
81 214         682 push(@{$self->_code()}, "}\n");
  214         482  
82            
83 214 50       526 $self->_trace()->print($self->_caller(), join("", @{$self->_code()})) if ($self->_trace()->debug_on());
  0         0  
84 12 0 66 12 0 85 eval(join("", @{$self->_code()}));
  12 100 0 12 0 23  
  12 50 66 12 0 2552  
  12 0 0 12 0 79  
  12 100 66 12 0 21  
  12 50 0 12 0 4400  
  12 0 66 12 0 80  
  12 100 0 12 0 25  
  12 50 66 11 0 1641  
  12 0 0 11 0 74  
  12 0 66 10 0 29  
  12 0 66 10 0 1960  
  12 0 100 10 0 87  
  12 0 33 10 0 31  
  12 0 66 9 0 2690  
  12 0 66 9 0 103  
  12 0 0 9 0 42  
  12 0 66 9 0 1319  
  12 0 66 9 0 73  
  12 0 0 9 0 25  
  12 0 66 9 0 2375  
  12 0 0 9 0 84  
  12 0 66 9 0 44  
  12 0 0 9 0 3635  
  11 0 66 9 0 65  
  11 0 0 9 0 29  
  11 0 0 9 0 10288  
  11 0 0 9 0 77  
  11 0 0 9 0 24  
  11 0 0 9 0 5787  
  10 0 66 9   71  
  10 0 0 7   20  
  10 0 66 7   1336  
  10 0 0 7   71  
  10 0 33 7   41  
  10 0 100 7   1805  
  10 100 0 7   58  
  10 50 66 7   34  
  10 0 0 7   1935  
  10 100 33 7   60  
  10 50 0 7   15  
  10 0 66 7   1887  
  9 100 0 7   53  
  9 50 66 7   17  
  9 0 66 7   1543  
  9 50 33 7   68  
  9 0 0 7   20  
  9 0 0 7   2385  
  9 50 33 7   56  
  9 0 0 7   19  
  9 0 33 7   3068  
  9 50 0 7   64  
  9 0 33 7   17  
  9 0 33 7   1924  
  9 0 0 7   52  
  9 0 33 7   16  
  9 0 0 7   1570  
  9 0 0 7   54  
  9 0 0 7   15  
  9 0 0 7   1805  
  9 0 0 7   55  
  9 0 100 7   19  
  9 0 0 7   4386  
  9 0 0 7   73  
  9 0 0 7   19  
  9 0 0 7   1249  
  9 0 33 7   56  
  9 0 0 7   19  
  9 0 0 7   2094  
  9 0 0 7   74  
  9 0 0 7   21  
  9 0 0 7   1728  
  9 0 0 7   57  
  9 0 0 7   37  
  9 100 0 7   1395  
  9 100 0 7   51  
  9 50 0 7   20  
  9 100 0 7   1961  
  9 100 0 7   68  
  9 50 0 7   19  
  9 0 0 7   1864  
  9 50 0 7   49  
  9 100 0 7   16  
  9 100 0 7   1844  
  9 50 0 7   136  
  9 100 0 7   23  
  9 50 0 7   2863  
  9 0 0 7   62  
  9 100 0 7   17  
  9 50 0 7   916  
  9 0 0 7   48  
  9 100 0 7   14  
  9 50 66 7   1434  
  7 0 0 7   37  
  7 100 33 7   17  
  7 50 0 7   1098  
  7 0 66 7   42  
  7 0 0 7   16  
  7 0 66 7   907  
  7 0 0 7   36  
  7 0 66 7   14  
  7 0 0 7   818  
  7 0 66 7   49  
  7 100 0 7   14  
  7 50 0 7   1148  
  7 0 66 7   47  
  7 100 0 7   14  
  7 50 0 7   833  
  7 0 66 7   43  
  7 0 0 7   11  
  7 50 66 7   783  
  7 50 0 7   54  
  7 0 0 7   12  
  7 0 66 7   737  
  7 0   7   42  
  7 0   7   13  
  7 50   7   699  
  7 50   7   42  
  7 50   7   10  
  7 50   7   839  
  7 50   7   41  
  7 50   7   21  
  7 0   7   1155  
  7 0   7   114  
  7 0   7   11  
  7 0   7   601  
  7 0   7   33  
  7 0   7   15  
  7 0   7   957  
  7 0   7   40  
  7 0   7   14  
  7 0   7   550  
  7 0   7   34  
  7 0   7   10  
  7 0   7   755  
  7 0   7   36  
  7 50   7   12  
  7 50   7   1181  
  7 0   7   60  
  7 0   7   15  
  7 50   7   1616  
  7 50   7   43  
  7 0   7   13  
  7 0   7   1256  
  7 50   7   42  
  7 50   7   13  
  7 0   7   2143  
  7 0   7   39  
  7 0   7   11  
  7 0   7   888  
  7 0   7   44  
  7 0   7   23  
  7 0   7   1136  
  7 0   7   43  
  7 0   7   13  
  7 0   7   1029  
  7 50   7   72  
  7 50   7   29  
  7 0   7   861  
  7 0   7   43  
  7 0   7   15  
  7 0   7   965  
  7 0   7   45  
  7 0   7   16  
  7 0   7   2466  
  7 0   7   39  
  7 50   7   13  
  7 50   7   756  
  7 50   7   36  
  7 100   7   14  
  7 100   7   746  
  7 50   7   37  
  7 100   7   14  
  7 100   7   523  
  7 50   7   33  
  7 50   7   58  
  7 100   7   538  
  7 50   7   35  
  7 50   7   19  
  7 100   7   800  
  7 50   7   42  
  7 50   7   12  
  7 100   7   1117  
  7 100   7   45  
  7 100   7   11  
  7 50   7   648  
  7 50   7   38  
  7 100   7   15  
  7 100   7   928  
  7 100   7   43  
  7 100   7   12  
  7 100   7   576  
  7 50   5   35  
  7 100   5   13  
  7 100   5   601  
  7 100   5   37  
  7 100   5   12  
  7 50   5   823  
  7 50   5   39  
  7 50   268   16  
  7 50   268   1092  
  7 50   2   36  
  7 50   0   14  
  7 50   0   681  
  7 0   0   38  
  7 0   0   14  
  7 0   0   685  
  7 0   0   37  
  7 50   0   9  
  7 100   0   573  
  7 50   0   36  
  7 50   0   13  
  7 50   0   671  
  7 50   0   33  
  7 50   0   12  
  7 100   0   882  
  7 50   0   41  
  7 50   0   22  
  7 50   0   1301  
  7 0   0   52  
  7 0   0   16  
  7 0   0   874  
  7 0   0   38  
  7 0   0   11  
  7 0   0   690  
  7 0   0   36  
  7 0   0   17  
  7 0   0   622  
  7 0   0   35  
  7 100   0   12  
  7 50   240   612  
  7 100   48   38  
  7 100   5   14  
  7 100   0   852  
  7 100   3   48  
  7 100   0   18  
  7 100   1   1450  
  7 50   0   72  
  7 50   0   13  
  7 50   1   2859  
  7 50   0   135  
  7 50   0   14  
  7 50   1   748  
  7 0   0   48  
  7 0   0   20  
  7 0   0   1253  
  7 0   0   39  
  7 0   0   16  
  7 0   0   706  
  7 0   0   47  
  7 0   0   12  
  7 0   0   629  
  7 0   0   38  
  7 0   0   15  
  7 0   0   1397  
  7 0   0   44  
  7 0   0   15  
  7 0   0   1483  
  7 0   0   41  
  7 0   0   13  
  7 0   0   740  
  7 0   0   39  
  7 0   600   13  
  7 0   222   801  
  7 0   48   40  
  7 0   256   14  
  7 0   57   667  
  7 0   15   36  
  7 0   74   14  
  7 0   0   774  
  7 0   0   38  
  7 0   72   17  
  7 0   111   921  
  7 0   0   41  
  7 0   3   15  
  7 0   0   1724  
  7 0   0   39  
  7 0   10   18  
  7 0   1   565  
  7 0   3   33  
  7 0   0   14  
  7 0   0   761  
  7 0   0   54  
  7 0   0   14  
  7 0   0   549  
  7 0   0   35  
  7 0   0   18  
  7 0   11   586  
  7 0   0   57  
  7 0   19   15  
  7 0   0   1062  
  7 0   6   45  
  7 50   0   11  
  7 0   0   1256  
  7 0   0   39  
  7 100   0   14  
  7 50   0   621  
  7 50   6   49  
  7 0   0   16  
  7 50   0   884  
  7 100   0   39  
  7 100   0   15  
  7 50   18   545  
  7 0   21   38  
  7 100   0   12  
  7 50   10   579  
  7 0   0   34  
  7 100   24   20  
  7 50   0   775  
  7 0   8   46  
  7 0   0   16  
  7 50   22   1082  
  7 100   2   44  
  7 50   22   26  
  7 0   0   977  
  7 100   0   45  
  7 50   15   13  
  7 0   0   704  
  7 0   18   39  
  7 50   0   16  
  7 100   2   661  
  7 50   23   80  
  7 0   0   11  
  7 0   1   571  
  7 0   0   43  
  7 0   0   39  
  7 0   0   891  
  7 0   0   42  
  7 0   0   15  
  7 0   14   1663  
  7 0   0   50  
  7 0   0   31  
  7 50   0   722  
  7 0   0   36  
  7 0   0   16  
  7 0   0   879  
  7 0   0   39  
  7 0   0   14  
  7 0   0   581  
  7 0   0   35  
  7 0   0   14  
  7 0   0   560  
  7 0   0   33  
  7 0   0   21  
  7 0   0   839  
  7 0   0   41  
  7     0   13  
  7     0   1005  
  7     0   38  
  7     0   12  
  7     0   1268  
  7     0   37  
  7     0   29  
  7     0   691  
  7     0   37  
  7     0   14  
  7     0   724  
  7     0   40  
  7     0   13  
  7     0   853  
  7     0   40  
  7     0   15  
  7     0   975  
  7     2   46  
  7     0   14  
  7     0   1602  
  7     0   41  
  7     0   15  
  7     0   1977  
  7     0   40  
  7     0   14  
  7     0   898  
  7     0   35  
  7     0   15  
  7     0   749  
  7     0   38  
  7     0   13  
  7     0   848  
  7     0   42  
  7     0   12  
  7     0   823  
  7     0   39  
  7     0   13  
  7     0   809  
  7     0   44  
  7     0   17  
  7     0   1188  
  7     0   50  
  7     0   12  
  7     0   653  
  7     0   38  
  7     0   15  
  7     0   821  
  7     0   42  
  7     0   17  
  7     0   596  
  7     0   37  
  7     0   22  
  7     0   799  
  7     0   40  
  7     0   13  
  7     0   902  
  7     0   56  
  7     0   32  
  7     0   1603  
  7     0   60  
  7     0   27  
  7     0   1823  
  7     0   174  
  7     0   18  
  7     0   708  
  7     0   40  
  7     0   13  
  7     0   771  
  7     0   37  
  7     0   12  
  7     0   799  
  7     0   37  
  7     0   18  
  7     0   812  
  7     1   33  
  7     7   17  
  7     13   999  
  7     2   48  
  7     5   16  
  7     14   1611  
  7     860   41  
  7     18   19  
  7     0   2016  
  7     0   43  
  7     0   14  
  7     0   779  
  7     0   35  
  7     0   15  
  7     0   878  
  7     0   38  
  7     0   14  
  7     0   991  
  7     0   41  
  7     0   11  
  7     0   594  
  7     0   42  
  7     1   13  
  7     0   987  
  7     0   86  
  7     0   15  
  7     0   1314  
  7     0   43  
  7     0   16  
  7     0   2632  
  7     0   63  
  7     0   14  
  7     0   1889  
  7     0   46  
  7     0   20  
  7     0   941  
  7     0   5844  
  7     0   16  
  7     0   1345  
  7     0   39  
  7     0   14  
  7     2   797  
  7     0   36  
  7     0   19  
  7     0   868  
  7     0   46  
  7     0   18  
  7     0   1351  
  7     0   45  
  7     0   16  
  7     0   2894  
  7     0   47  
  7     0   15  
  7     0   762  
  7     0   39  
  7     0   14  
  7     0   892  
  7     0   39  
  7     0   16  
  7     0   1248  
  7     0   40  
  7     0   14  
  7     0   1182  
  7     0   42  
  7     0   35  
  7         1104  
  7         50  
  7         17  
  7         3259  
  7         45  
  7         15  
  7         2265  
  7         45  
  7         13  
  7         733  
  7         48  
  7         14  
  7         833  
  7         37  
  7         21  
  7         683  
  7         35  
  7         19  
  7         1182  
  7         40  
  7         14  
  7         945  
  7         49  
  7         15  
  7         1416  
  7         43  
  7         14  
  7         2035  
  7         45  
  7         15  
  7         689  
  7         41  
  7         12  
  7         876  
  7         38  
  7         19  
  7         951  
  7         53  
  7         16  
  7         717  
  7         41  
  7         13  
  7         903  
  7         53  
  7         16  
  7         1524  
  7         40  
  7         13  
  7         1208  
  7         42  
  7         15  
  7         2694  
  7         44  
  7         17  
  7         809  
  7         40  
  7         15  
  7         6628  
  7         50  
  7         26  
  7         899  
  7         41  
  7         13  
  7         690  
  7         44  
  7         14  
  7         1341  
  7         52  
  7         16  
  7         1433  
  7         44  
  7         15  
  7         1246  
  7         40  
  7         24  
  7         2717  
  7         44  
  7         14  
  7         682  
  7         37  
  7         14  
  7         995  
  7         38  
  7         14  
  7         937  
  7         45  
  7         14  
  7         812  
  7         57  
  7         15  
  7         7081  
  5         45  
  5         13  
  5         2495  
  5         31  
  5         11  
  5         1826  
  5         34  
  5         10  
  5         1035  
  5         38  
  5         10  
  5         618  
  5         30  
  5         11  
  5         842  
  5         33  
  5         2718  
  5         649  
  5         31  
  5         9  
  5         779  
  214         356  
  214         524  
  268         461  
  268         356  
  268         1271  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  268         735  
  268         899  
  268         492  
  268         410  
  268         1097  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  268         723  
  268         1085  
  2         5  
  2         3  
  2         11  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         7  
  2         9  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  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         426  
  240         336  
  240         1021  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  240         660  
  240         834  
  48         94  
  48         75  
  48         199  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  48         259  
  48         166  
  5         7  
  5         8  
  5         20  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         15  
  5         12  
  3         7  
  3         122  
  3         13  
  3         22  
  3         34  
  0         0  
  0         0  
  0         0  
  1         4  
  1         42  
  1         4  
  1         4  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         3  
  1         41  
  1         7  
  1         4  
  1         3  
  1         4  
  1         3  
  1         5  
  1         31  
  0         0  
  0         0  
  1         3  
  1         50  
  1         9  
  1         3  
  1         30  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  600         1029  
  600         702  
  600         2030  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  613         1278  
  613         2774  
  235         455  
  222         286  
  222         747  
  2         14  
  13         37  
  13         26  
  30         89  
  19         58  
  220         500  
  222         3009  
  48         319  
  48         64  
  48         185  
  11         68  
  11         31  
  11         56  
  8         20  
  8         14  
  8         39  
  48         254  
  48         168  
  48         760  
  243         409  
  243         349  
  243         1143  
  8         36  
  8         24  
  8         64  
  0         0  
  0         0  
  243         947  
  243         825  
  46         78  
  46         75  
  46         204  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  46         149  
  46         149  
  7         11  
  7         13  
  7         32  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  7         966  
  7         36  
  74         115  
  74         99  
  74         329  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  74         225  
  74         327  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  72         113  
  72         89  
  72         234  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  72         174  
  72         280  
  111         179  
  111         142  
  111         362  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  111         909  
  111         448  
  0         0  
  0         0  
  0         0  
  3         7  
  3         106  
  3         102  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         18  
  10         294  
  10         335  
  1         2  
  1         34  
  1         16  
  3         6  
  3         94  
  3         129  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  11         18  
  11         317  
  11         362  
  0         0  
  0         0  
  0         0  
  19         36  
  19         47  
  19         446  
  0         0  
  0         0  
  0         0  
  6         10  
  6         18  
  6         151  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         12  
  6         175  
  6         98  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  18         39  
  18         84  
  0         0  
  18         24  
  18         63  
  18         36  
  18         86  
  18         64  
  18         65  
  39         155  
  39         191  
  20         235  
  39         106  
  21         60  
  27         40  
  27         112  
  21         61  
  21         101  
  21         97  
  21         90  
  21         61  
  21         76  
  3         112  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         19  
  10         65  
  9         278  
  10         17  
  10         28  
  28         31  
  28         92  
  10         30  
  10         28  
  10         145  
  0         0  
  0         0  
  24         55  
  24         122  
  0         0  
  24         44  
  24         73  
  26         43  
  34         202  
  32         146  
  30         408  
  32         144  
  32         142  
  48         102  
  48         197  
  9         31  
  8         187  
  0         0  
  0         0  
  0         0  
  22         44  
  22         92  
  0         0  
  24         36  
  24         72  
  23         72  
  46         157  
  46         184  
  24         110  
  45         140  
  45         156  
  45         99  
  45         202  
  24         85  
  22         114  
  22         118  
  22         67  
  22         98  
  21         523  
  0         0  
  0         0  
  15         23  
  15         51  
  0         0  
  15         17  
  15         33  
  35         43  
  35         118  
  15         56  
  15         68  
  15         801  
  0         0  
  0         0  
  18         38  
  18         65  
  0         0  
  18         25  
  18         44  
  18         26  
  18         73  
  18         47  
  18         69  
  18         64  
  18         59  
  18         44  
  18         74  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         5  
  2         18  
  2         65  
  25         66  
  25         103  
  6         8  
  29         59  
  25         79  
  25         48  
  23         115  
  23         83  
  23         116  
  23         200  
  23         114  
  23         58  
  23         101  
  1         4  
  1         12  
  0         0  
  1         3  
  1         6  
  3         5  
  3         16  
  1         6  
  1         11  
  1         8  
  1         14  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  14         29  
  14         77  
  8         250  
  14         22  
  14         41  
  41         47  
  41         149  
  14         46  
  14         67  
  14         70  
  9         33  
  9         41  
  9         33  
  9         216  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  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         36  
  2         14  
  2         6  
  2         7  
  2         7  
  2         7  
  2         10  
  2         11  
  2         9  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  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         20  
  1         36  
  0         0  
  0         0  
  0         0  
  13         114  
  13         17  
  13         62  
  2         4  
  2         5  
  2         11  
  0         0  
  0         0  
  13         40  
  13         429  
  0         0  
  2         7  
  2         13  
  2         4  
  2         5  
  2         8  
  0         0  
  0         0  
  7         9  
  7         10  
  10         65  
  5         14  
  5         105  
  0         0  
  0         0  
  0         0  
  7         18  
  7         105  
  3         10  
  3         93  
  14         23  
  14         20  
  14         64  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  14         38  
  14         120  
  8         11  
  8         13  
  8         30  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  8         22  
  8         203  
  5         8  
  5         8  
  5         20  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         24  
  5         21  
  5         35  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  852         1591  
  852         1094  
  852         2803  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  852         2688  
  852         4228  
  13         19  
  13         18  
  13         49  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  13         215  
  13         35  
  13         41  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  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         4  
  1         2  
  1         6  
  1         7  
  1         5  
  1         6  
  1         4  
  1         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  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  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         7  
  3         20  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
85 214 50       1593 confess "**Error in eval for @{[ $self->_caller() ]} ClassMembers functions creation:\n$@" if ($@);
  0         0  
86             }
87             sub _code
88             {
89 3000     3000   5190 my $self = shift;
90 3000 100       6571 $self->{CODE} = shift if (@_);
91 3000         39881 return $self->{CODE};
92             }
93             sub _trace
94             {
95 428     428   756 my $self = shift;
96 428 100       1922 $self->{_TRACE} = shift if (@_);
97 428         1504 return $self->{_TRACE};
98             }
99             sub _caller
100             {
101 593     593   894 my $self = shift;
102 593 100       1854 $self->{CALLER} = shift if (@_);
103 593         2801 return $self->{CALLER};
104             }
105             sub _caller_str
106             {
107 0     0   0 my $self = shift;
108 0         0 my $str = $self->_caller();
109 0         0 $str =~ s/[:]+/_/g;
110 10         16 return $str;
111             }
112             sub _members
113             {
114 3348     3348   4369 my $self = shift;
115 3348         6420 foreach (@_) {
116 220 100       751 my $m = ref($_) ? $_
117             : Class::STL::ClassMembers::DataMember->new(name => $_, _caller => $self->_caller());
118 220         1005 $self->{MEMBERS}->{$m->name()} = $m;
119             }
120 3338         15599 return $self->{MEMBERS};
121             }
122             #> sub code_get_set
123             #> {
124             #> #TODO: get() -- returns array with mebers' values
125             #> # set(, , ...) -- sets member(s) value(s)
126             #> }
127             sub code_members_access
128             {
129 214     214 0 309 my $self = shift;
130 214         628 map(push(@{$self->_code()}, $_->code_memaccess($_)), values(%{$self->_members()}));
  228         541  
  224         582  
131 214         403 return;
132             }
133             sub code_members_init
134             {
135 214     214 0 333 my $self = shift;
136 214         390 my $tab = ' ' x 4;
137 214         371 my $code = "sub members_init {\n"; # --> BUILDALL
138 214         463 $code .= "${tab}my \$self = shift;\n";
139 214         407 $code .= "${tab}use vars qw(\@ISA);\n";
140 214         384 $code .= "${tab}if (int(\@ISA) && (caller())[0] ne __PACKAGE__) {\n";
141 214         495 $code .= "${tab}${tab}\$self->SUPER::members_init(\@_);\n";
142 214         409 $code .= "${tab}}\n";
143 214 100       288 if (keys(%{$self->_members()})) {
  214         554  
144 123         301 $code .= "${tab}my \@p;\n";
145 123         246 $code .= "${tab}while (\@_) { my \$p=shift; push(\@p, \$p, shift) if (!ref(\$p)); }\n";
146 123         207 $code .= "${tab}my \%p = \@p;\n";
147 123         309 $code .= "${tab}@{[ join(\"\n \", map($_->code_meminit(), values( %{$self->_members()} ))) ]}\n";
  123         215  
  123         605  
148             }
149 214         937 $code .= "}\n";
150 214         286 push(@{$self->_code()}, $code);
  214         503  
151 214         486 return;
152             }
153             sub code_members_print
154             {
155 214     214 0 317 my $self = shift;
156 214         334 my $tab = ' ' x 4;
157 214         370 my $code = "sub members_print {\n";
158 214         407 $code .= "${tab}my \$self = shift;\n";
159 214         394 $code .= "${tab}my \$delim = shift || '|';\n";
160 214 100       290 if (keys(%{$self->_members()})) {
  214         694  
161 123         316 $code .= "${tab}return join(\"\$delim\",\n${tab}${tab}";
162 123         283 $code .=
163             join(qq/,\n$tab$tab/,
164             map
165             (
166             qq/"$_=\@{[ defined(\$self->$_()) ? \$self->$_() : 'NULL' ]}"/,
167 123         810 sort(keys(%{$self->_members()}))
168             )
169             );
170 123         351 $code .= "\n${tab});\n";
171             } else {
172 91         215 $code .= "${tab}return '';\n";
173             }
174 214         349 $code .= "}\n";
175 214         308 push(@{$self->_code()}, $code);
  214         475  
176 214         405 return;
177             }
178             sub code_members_local
179             {
180 214     214 0 484 my $self = shift;
181 214         487 my $tab = ' ' x 4;
182 214         414 my $code = "sub members_local { # static function\n";
183 214 100       325 if (keys(%{$self->_members()})) {
  214         563  
184 123         312 $code .= "${tab}return {\n${tab}${tab}";
185 123         316 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  123         273  
186 123         328 $code .= "\n${tab}};\n";
187             } else {
188 91         226 $code .= "${tab}return {};\n";
189             }
190 214         358 $code .= "}\n";
191 214         301 push(@{$self->_code()}, $code);
  214         476  
192 214         489 return;
193             }
194             sub code_members_data
195             {
196 214     214 0 361 my $self = shift;
197 214         339 my $tab = ' ' x 4;
198 214         424 my $code = "sub memdata {\n";
199 214         450 $code .= "${tab}my \$self = shift;\n";
200 214         390 $code .= "${tab}use vars qw(\@ISA);\n";
201 214         372 $code .= "${tab}my \$super = (int(\@ISA))";
202 214         442 $code .= " ? \$self->SUPER::memdata() : {};\n";
203 214 100       398 if (keys(%{$self->_members()})) {
  214         466  
204 123         291 $code .= "${tab}return {\n${tab}${tab}";
205 123         270 $code .= "\%\$super,\n${tab}${tab}";
206 123         254 $code .= join(",\n${tab}${tab}", map($_->code_memdata(), values(%{$self->_members()})));
  123         300  
207 123         326 $code .= "\n${tab}};\n";
208             } else {
209 91         12314 $code .= "${tab}return {\%\$super};\n";
210             }
211 214         429 $code .= "}\n";
212 214         295 push(@{$self->_code()}, $code);
  214         478  
213 214         389 return;
214             }
215             sub code_members
216             {
217 214     214 0 303 my $self = shift;
218 214         359 my $tab = ' ' x 4;
219 214         301 my $code = "sub members {\n";
220 214         522 $code .= "${tab}my \$self = shift;\n";
221 214         373 $code .= "${tab}use vars qw(\@ISA);\n";
222 214         1474 $code .= "${tab}my \$super = (int(\@ISA))";
223 214         499 $code .= " ? \$self->SUPER::members() : {};\n";
224 214         721 $code .= "${tab}return keys(\%\$super)\n${tab}? {\n${tab}${tab}";
225 214         407 $code .= "\%\$super,\n${tab}${tab}";
226 214         699 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  214         465  
227 214         570 $code .= "\n${tab}}\n";
228 214         465 $code .= "${tab}: {\n${tab}${tab}";
229 214         557 $code .= join(",\n${tab}${tab}", map($_->code_memattr(), values(%{$self->_members()})));
  214         676  
230 214         477 $code .= "\n${tab}};\n";
231 214         302 $code .= "}\n";
232 214         307 push(@{$self->_code()}, $code);
  214         571  
233 214         409 return;
234             }
235             sub code_swap
236             {
237 214     214 0 355 my $self = shift;
238 214         565 my $tab = ' ' x 4;
239 214         317 my $code = "sub swap {\n";
240 214         395 $code .= "${tab}my \$self = shift;\n";
241 214         628 $code .= "${tab}my \$other = shift;\n";
242 214         456 $code .= "${tab}use vars qw(\@ISA);\n";
243 214         398 $code .= "${tab}my \$tmp = \$self->clone();\n";
244 214         11178 $code .= "${tab}\$self->SUPER\::swap(\$other) if (int(\@ISA));\n";
245 214 100       613 if (keys(%{$self->_members()})) {
  214         708  
246 123         313 $code .= "${tab}@{[ join(qq#\n${tab}#,
  123         262  
247 123         366 map(qq#\$self->$_(\$other->$_());#, keys( %{$self->_members()} ) )) ]}\n";
248 123         329 $code .= "${tab}@{[ join(qq#\n${tab}#,
  123         395  
249 123         342 map(qq#\$other->$_(\$tmp->$_());#, keys( %{$self->_members()} ) )) ]}\n";
250             }
251 214         509 $code .= "}\n";
252 214         264 push(@{$self->_code()}, $code);
  214         488  
253 214         411 return;
254             }
255             sub code_clone
256             {
257 214     214 0 324 my $self = shift;
258 214         342 my $tab = ' ' x 4;
259 214         413 my $code = "sub _clone {\n";
260 214         535 $code .= "${tab}my \$self = shift;\n";
261 214         494 $code .= "${tab}use vars qw(\@ISA);\n";
262 214         418 $code .= "${tab}my \$clone = int(\@ISA) ? \$self->SUPER\::_clone() : \$self->_new();\n";
263 214 100       306 if (keys(%{$self->_members()})) {
  214         495  
264 123         228 $code .= "${tab}@{[ join(qq#\n${tab}#,
  123         265  
265 123         252 map(qq#\$clone->$_(\$self->$_());#, keys( %{$self->_members()} ) )) ]}\n";
266             }
267 214         705 $code .= "${tab}return \$clone;\n";
268 214         348 $code .= "}\n";
269 214         303 $code .= "sub clone {\n";
270 214         514 $code .= "${tab}my \$self = shift;\n";
271 214         401 $code .= "${tab}use vars qw(\@ISA);\n";
272 214         395 $code .= "${tab}my \$clone = int(\@ISA) ? \$self->SUPER\::clone() : \$self->new();\n";
273 214 100       274 if (keys(%{$self->_members()})) {
  214         539  
274 123         234 $code .= "${tab}@{[ join(qq#\n${tab}#,
  123         333  
275 123         257 map(qq#\$clone->$_(\$self->$_());#, keys( %{$self->_members()} ) )) ]}\n";
276             }
277 214         650 $code .= "${tab}return \$clone;\n";
278 214         321 $code .= "}\n";
279 214         294 push(@{$self->_code()}, $code);
  214         684  
280 214         478 return;
281             }
282             sub code_undefine
283             {
284 214     214 0 332 my $self = shift;
285 214         325 my $tab = ' ' x 4;
286             #< my $c = $self->_caller_str();
287 214         677 my $code = "sub undefine {\n${tab}my \$self = shift;\n";
288 214         554 $code .= "${tab}map(\$self->{\"\@{[ uc(\$_) ]}\"} = undef, \@_);\n";
289 214         417 $code .= "}\n";
290 214         264 push(@{$self->_code()}, $code);
  214         419  
291 214         507 return;
292             }
293             #? sub code_factory
294             #? {
295             #? my $self = shift;
296             #? return unless exists ${$self->_members()}{'element_type'};
297             #? my $m = $self->_members()->{'element_type'};
298             #? my $tab = ' ' x 4;
299             #? my $code = "sub factory {\n";
300             #? $code .= "${tab}my \$self = shift;\n";
301             #? $code .= "${tab}return @{[ $m->default() ]}->new(\@_);\n";
302             #? $code .= "}\n";
303             #? push(@{$self->_code()}, $code);
304             #? return;
305             #? }
306             }
307             # ----------------------------------------------------------------------------------------------------
308             1;