annotate Lib/IMPL/Class/Property/Base.pm @ 194:4d0e1962161c

Replaced tabs with spaces IMPL::Web::View - fixed document model, new features (control classes, document constructor parameters)
author cin
date Tue, 10 Apr 2012 20:08:29 +0400
parents d1676be8afcc
children 6d8092d8ce1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
1 package IMPL::Class::Property::Base;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
2 use strict;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
3
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
4 use IMPL::Class::Property;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
5
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
6 require IMPL::Class::Member;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
7
60
b0c068da93ac Lazy activation for the configuration objects (final concept)
wizard
parents: 59
diff changeset
8 sub factoryParams { qw($class $name $set $get $validator) };
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
9
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
10 my %factoryCache;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
11
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
12 my $accessor_get_no = 'die new IMPL::Exception(\'The property is write only\',$name,$class) unless $get;';
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
13 my $accessor_set_no = 'die new IMPL::Exception(\'The property is read only\',$name,$class) unless $set;';
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
14
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
15 my $custom_accessor_get = 'unshift @_, $this and goto &$get;';
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
16 my $custom_accessor_set = 'unshift @_, $this and goto &$set;';
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
17
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
18 my $validator_code = '$this->$validator(@_);';
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
19
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
20 my %access_code = (
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
21 IMPL::Class::Member::MOD_PUBLIC , "",
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
22 IMPL::Class::Member::MOD_PROTECTED, "die new IMPL::Exception('Can\\'t access the protected member',\$name,\$class,scalar caller) unless UNIVERSAL::isa(scalar caller,\$class);",
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
23 IMPL::Class::Member::MOD_PRIVATE, "die new IMPL::Exception('Can\\'t access the private member',\$name,\$class,scalar caller) unless caller eq \$class;"
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
24 );
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
25
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
26 my $virtual_call = q(
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
27 my $method = $this->can($name);
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
28 return $this->$method(@_) unless $method == $accessor or caller->isa($class);
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
29 );
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
30
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
31 my $owner_check = "die new IMPL::Exception('Set accessor is restricted to the owner',\$name,\$class,scalar caller) unless caller eq \$class;";
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
32
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
33 sub GenerateAccessors {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
34 my ($self,$param,@params) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
35
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
36 my %accessors;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
37
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
38 if (not ref $param) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
39 if ($param & prop_list) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
40 $accessors{get} = ($param & prop_get) ? $self->GenerateGetList(@params) : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
41 $accessors{set} = ($param & prop_set) ? $self->GenerateSetList(@params) : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
42 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
43 $accessors{get} = ($param & prop_get) ? $self->GenerateGet(@params) : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
44 $accessors{set} = ($param & prop_set) ? $self->GenerateSet(@params) : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
45 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
46 $accessors{owner} = (($param & owner_set) == owner_set) ? $owner_check : "";
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
47 } elsif (UNIVERSAL::isa($param,'HASH')) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
48 $accessors{get} = $param->{get} ? $custom_accessor_get : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
49 $accessors{set} = $param->{set} ? $custom_accessor_set : undef;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
50 $accessors{owner} = "";
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
51 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
52 die new IMPL::Exception('The unsupported accessor/mutators supplied',$param);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
53 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
54
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
55 return \%accessors;
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
56 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
57
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
58 sub GenerateSet {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
59 die new IMPL::Exception("Standard accessors not supported",'Set');
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
60 }
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
61
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
62 sub GenerateGet {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
63 die new IMPL::Exception("Standard accessors not supported",'Get');
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
64 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
65
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
66 sub GenerateGetList {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
67 die new IMPL::Exception("Standard accessors not supported",'GetList');
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
68 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
69
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
70 sub GenerateSetList {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
71 my ($self) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
72 die new IMPL::Exception("Standard accessors not supported",'SetList');
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
73 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
74
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
75 sub Make {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
76 my ($self,$propInfo) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
77
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
78 my $key = $self->MakeFactoryKey($propInfo);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
79
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
80 my $factoryInfo = $factoryCache{$key};
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
81
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
82 unless ($factoryInfo) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
83 my $mutators = $self->GenerateAccessors($propInfo->Mutators);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
84 $factoryInfo = {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
85 factory => $self->CreateFactory(
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
86 $access_code{ $propInfo->Access },
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
87 $propInfo->Attributes->{validator} ? $validator_code : "",
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
88 $mutators->{owner},
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
89 $mutators->{get} || $accessor_get_no,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
90 $mutators->{set} || $accessor_set_no
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
91 ),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
92 mutators => $mutators
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
93 };
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
94 $factoryCache{$key} = $factoryInfo;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
95 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
96
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
97 {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
98 no strict 'refs';
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
99 *{ $propInfo->Class.'::'.$propInfo->Name } = $factoryInfo->{factory}->($self->RemapFactoryParams($propInfo));
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
100 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
101
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
102 my $mutators = $factoryInfo->{mutators};
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
103
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
104 $propInfo->canGet( $mutators->{get} ? 1 : 0 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
105 $propInfo->canSet( $mutators->{set} ? 1 : 0 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
106 $propInfo->ownerSet( $mutators->{owner} );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
107
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
108 1;
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
109 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
110
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
111 # extract from property info: class, name, get_accessor, set_accessor, validator
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
112 sub RemapFactoryParams {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
113 my ($self,$propInfo) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
114
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
115 my $mutators = $propInfo->Mutators;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
116 my $class = $propInfo->Class;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
117 my $validator = $propInfo->Attributes->{validator};
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
118
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
119 die new IMPL::Exception('Can\'t find the specified validator',$class,$validator) if $validator and ref $validator ne 'CODE' and not $class->can($validator);
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
120
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
121 return (
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
122 $propInfo->get(qw(Class Name)),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
123 (ref $mutators?
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
124 ($mutators->{set},$mutators->{get})
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
125 :
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
126 (undef,undef)
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
127 ),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
128 $validator
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
129 );
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
130 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
131
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
132 sub MakeFactoryKey {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
133 my ($self,$propInfo) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
134
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
135 my ($access,$mutators,$validator) = ($propInfo->get(qw(Access Mutators)),$propInfo->Attributes->{validator});
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
136
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
137 my $implementor = ref $self || $self;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
138
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
139 return join ('',
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
140 $implementor,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
141 $access,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
142 $validator ? 'v' : 'n',
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
143 ref $mutators ?
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
144 ('c' , $mutators->{get} ? 1 : 0, $mutators->{set} ? 1 : 0)
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
145 :
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
146 ('s',$mutators)
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
147 );
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
148 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
149
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
150 sub CreateFactory {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
151 my ($self,$codeAccessCheck,$codeValidator,$codeOwnerCheck,$codeGet,$codeSet) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
152
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
153 my $strParams = join(',',$self->factoryParams);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
154
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
155 my $factory = <<FACTORY;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
156
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
157 sub {
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
158 my ($strParams) = \@_;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
159 my \$accessor;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
160 \$accessor = sub {
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
161 my \$this = shift;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
162 $codeAccessCheck
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
163 if (\@_) {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
164 $codeOwnerCheck
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
165 $codeValidator
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
166 $codeSet
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
167 } else {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
168 $codeGet
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
169 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
170 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
171 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
172 FACTORY
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
173
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
174 return ( eval $factory or die new IMPL::Exception("Syntax error due compiling the factory","$@") );
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
175 }
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
176
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
177 1;
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
178
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
179 __END__
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
180
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
181 =pod
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
182
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
183 =head1 DESCRIPTION
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
184
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
185 Базовый класс для реализации свойств.
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
186
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
187 По существу свойства состоят из двух методов для установки и получения значений. Также
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
188 существует несколько вариантов доступа к свойству, и метод верификации значения. Еще
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
189 свойства могут быть виртуальными.
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
190
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
191 Для создания реализатора свойств достаточно унаследовать от этого класса и описать
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
192 методы для генерации кода получения и установки значения.
80
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
193
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
194 =head1 MEMBERS
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
195
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
196 =over
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
197
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
198 =item C<Make($propertyInfo)>
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
199
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
200 Создает свойство у класса, на основе C<$propertyInfo>, описывающего свойство. C<IMPL::Class::PropertyInfo>.
80
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
201
f017c0d7527c minor changes + docs
wizard
parents: 63
diff changeset
202 =back
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents:
diff changeset
203
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 134
diff changeset
204 =cut