Mercurial > pub > Impl
comparison Lib/IMPL/Serialization.pm @ 180:d1676be8afcc
Перекодировка в utf-8
author | sourcer |
---|---|
date | Fri, 30 Dec 2011 23:40:00 +0300 |
parents | 4267a2ac3d46 |
children | 4d0e1962161c |
comparison
equal
deleted
inserted
replaced
179:b3d91ff7aea9 | 180:d1676be8afcc |
---|---|
1 package IMPL::Serialization; | 1 package IMPL::Serialization; |
2 use strict; | 2 use strict; |
3 | 3 |
4 # 20060222 | 4 # 20060222 |
5 # ������ ��� ������������ �������� ������ | 5 # ������ ��� ������������ �������� ������ |
6 # (�) Sourcer, cin.sourcer@gmail.com | 6 # (пїЅ) Sourcer, cin.sourcer@gmail.com |
7 # revision 3 (20090517) | 7 # revision 3 (20090517) |
8 | 8 |
9 | 9 |
10 package IMPL::Serialization::Context; | 10 package IMPL::Serialization::Context; |
11 use parent qw(IMPL::Object); | 11 use parent qw(IMPL::Object); |
14 use IMPL::Class::Property::Direct; | 14 use IMPL::Class::Property::Direct; |
15 use IMPL::Exception; | 15 use IMPL::Exception; |
16 use Scalar::Util qw(refaddr); | 16 use Scalar::Util qw(refaddr); |
17 | 17 |
18 BEGIN { | 18 BEGIN { |
19 private _direct property ObjectWriter => prop_all; # ������, ������������ ������ � ����� | 19 private _direct property ObjectWriter => prop_all; # ������, ������������ ������ � ����� |
20 private _direct property Context => prop_all; # �������� (������� ������� ��� �������������, �� ��������������) | 20 private _direct property Context => prop_all; # �������� (������� ������� ��� �������������, �� ��������������) |
21 private _direct property NextID => prop_all;# ��������� ������������� ��� ������� | 21 private _direct property NextID => prop_all;# ��������� ������������� ��� ������� |
22 | 22 |
23 # ���������, ������� �����, ��� ��������������� ������������ ����. ������ ���������� | 23 # ���������, ������� �����, ��� ��������������� ������������ ����. ������ ���������� |
24 # �������� ������ �� IMPL::Serialization::Context, ������ ���������� ������ �� ������ | 24 # �������� ������ �� IMPL::Serialization::Context, ������ ���������� ������ �� ������ |
25 public _direct property Serializer => prop_all; | 25 public _direct property Serializer => prop_all; |
26 | 26 |
27 private _direct property State => prop_all; # ��������� ��������� ������������ | 27 private _direct property State => prop_all; # ��������� ��������� ������������ |
28 } | 28 } |
29 | 29 |
30 # �������� ������, �.�. ������� ������ �� ����� | 30 # �������� ������, �.�. ������� ������ �� ����� |
31 sub STATE_CLOSED () { 0 } | 31 sub STATE_CLOSED () { 0 } |
32 # �������� ������, �.�. ������ �����, �� � ��� ��� ������ �� ����� | 32 # �������� ������, �.�. ������ �����, �� � ��� ��� ������ �� ����� |
33 sub STATE_OPENED () { 1 } | 33 sub STATE_OPENED () { 1 } |
34 # �������� ������ � � ���� ����� ���� ��������� ������ ���������� | 34 # �������� ������ � � ���� ����� ���� ��������� ������ ���������� |
35 sub STATE_COMPLEX () { 2 } | 35 sub STATE_COMPLEX () { 2 } |
36 # �������� ������ � � ���� ��� ������ �� ����� ���� ���������, ��� ����� ������ | 36 # �������� ������ � � ���� ��� ������ �� ����� ���� ���������, ��� ����� ������ |
37 sub STATE_DATA () { 3 } | 37 sub STATE_DATA () { 3 } |
38 | 38 |
39 sub CTOR { | 39 sub CTOR { |
40 my ($this,%args) = @_; | 40 my ($this,%args) = @_; |
41 | 41 |
52 my ($this,$sName,$Var) = @_; | 52 my ($this,$sName,$Var) = @_; |
53 | 53 |
54 die new Exception ('Invalid operation') if $this->{$State} == STATE_DATA; | 54 die new Exception ('Invalid operation') if $this->{$State} == STATE_DATA; |
55 | 55 |
56 if (not ref $Var) { | 56 if (not ref $Var) { |
57 # ������� ����������� ��, ��� �����, �� ��� ���� ����, ����� �������, ������� ���� | 57 # ������� ����������� ��, ��� �����, �� ��� ���� ����, ����� �������, ������� ���� |
58 # �� �� ������, �� �������� ��������������, �� �� �� ����� | 58 # �� �� ������, �� �������� ��������������, �� �� �� ����� |
59 my $prevState = $this->{$State}; | 59 my $prevState = $this->{$State}; |
60 | 60 |
61 $this->{$ObjectWriter}->BeginObject(name => $sName);#, type => 'SCALAR'); | 61 $this->{$ObjectWriter}->BeginObject(name => $sName);#, type => 'SCALAR'); |
62 $this->{$State} = STATE_OPENED; | 62 $this->{$State} = STATE_OPENED; |
63 | 63 |
146 use IMPL::Class::Property; | 146 use IMPL::Class::Property; |
147 use IMPL::Class::Property::Direct; | 147 use IMPL::Class::Property::Direct; |
148 use IMPL::Exception; | 148 use IMPL::Exception; |
149 | 149 |
150 BEGIN { | 150 BEGIN { |
151 # ��� ����������������� �������, ���, ���� - �������������, �������� - ������. | 151 # ��� ����������������� �������, ���, ���� - �������������, �������� - ������. |
152 private _direct property Context => prop_all; | 152 private _direct property Context => prop_all; |
153 | 153 |
154 # ������� ������. ���������� ��� �������������� | 154 # ������� ������. ���������� ��� �������������� |
155 # { | 155 # { |
156 # Type => 'typename', | 156 # Type => 'typename', |
157 # Name => 'object_name', | 157 # Name => 'object_name', |
158 # Data => $Data, | 158 # Data => $Data, |
159 # Id => 'object_id' | 159 # Id => 'object_id' |
160 # } | 160 # } |
161 private _direct property CurrentObject => prop_all; | 161 private _direct property CurrentObject => prop_all; |
162 | 162 |
163 # ���� ��������. ���� ����������� �������� �������� �� ���� ���������� ����� ��������. | 163 # ���� ��������. ���� ����������� �������� �������� �� ���� ���������� ����� ��������. |
164 private _direct property ObjectsPath => prop_all; | 164 private _direct property ObjectsPath => prop_all; |
165 | 165 |
166 # ���� ������� ������ ����� �������� | 166 # ���� ������� ������ ����� �������� |
167 public _direct property Root => prop_get; | 167 public _direct property Root => prop_get; |
168 | 168 |
169 # ������� ������ � ���������� �� ���� ������ | 169 # ������� ������ � ���������� �� ���� ������ |
170 # ObjectFactory($Type,$DeserializationData,$refSurogate) | 170 # ObjectFactory($Type,$DeserializationData,$refSurogate) |
171 # $Type - ��� ���� ������ | 171 # $Type - ��� ���� ������ |
172 # $DeserializationData - ���� ������ �� ������ � ������� ��� �������������� �����, | 172 # $DeserializationData - ���� ������ �� ������ � ������� ��� �������������� �����, |
173 # ���� ������ ���������� ������. | 173 # ���� ������ ���������� ������. |
174 # $refSurogate - ������ �� �������������� ���������, �� ������������������ ������. | 174 # $refSurogate - ������ �� �������������� ���������, �� ������������������ ������. |
175 # ����� ��������� �������� undef | 175 # ����� ��������� �������� undef |
176 private _direct property ObjectFactory => prop_all; | 176 private _direct property ObjectFactory => prop_all; |
177 | 177 |
178 # ������� �������������������� �������. | 178 # ������� �������������������� �������. |
179 # SurogateHelper($Type) | 179 # SurogateHelper($Type) |
180 # $Type ��� �����, ��� ������� ����� �������. | 180 # $Type ��� �����, ��� ������� ����� �������. |
181 private _direct property SurrogateHelper => prop_all; | 181 private _direct property SurrogateHelper => prop_all; |
182 } | 182 } |
183 | 183 |
184 sub CTOR { | 184 sub CTOR { |
185 my ($this,%args) = @_; | 185 my ($this,%args) = @_; |
207 push @{$rhCurrentObj->{'Data'}}, $name,$refObj; | 207 push @{$rhCurrentObj->{'Data'}}, $name,$refObj; |
208 } else { | 208 } else { |
209 $rhCurrentObj->{'Data'} = [$name,$refObj]; | 209 $rhCurrentObj->{'Data'} = [$name,$refObj]; |
210 } | 210 } |
211 | 211 |
212 # ��� �����, ��� ����� ������ OnObjectEnd ��� �������, ������� ��� ������� �������. �.�. �� �� ������� ���� | 212 # ��� �����, ��� ����� ������ OnObjectEnd ��� �������, ������� ��� ������� �������. �.�. �� �� ������� ���� |
213 push @{$this->{$ObjectsPath}},$rhCurrentObj; | 213 push @{$this->{$ObjectsPath}},$rhCurrentObj; |
214 $this->{$CurrentObject} = undef; | 214 $this->{$CurrentObject} = undef; |
215 | 215 |
216 } else { | 216 } else { |
217 push @{$this->{$ObjectsPath}},$this->{$CurrentObject} if $this->{$CurrentObject}; | 217 push @{$this->{$ObjectsPath}},$this->{$CurrentObject} if $this->{$CurrentObject}; |
251 my ($this,$name) = @_; | 251 my ($this,$name) = @_; |
252 | 252 |
253 my $rhObject = $this->{$CurrentObject}; | 253 my $rhObject = $this->{$CurrentObject}; |
254 my $rhPrevObject = pop @{$this->{$ObjectsPath}}; | 254 my $rhPrevObject = pop @{$this->{$ObjectsPath}}; |
255 | 255 |
256 # ���� ������� ������ �� ���������, � ���������� - ���������, ������ ������� - ��� ������ | 256 # ���� ������� ������ �� ���������, � ���������� - ���������, ������ ������� - ��� ������ |
257 # ������ ��������������� ���������� � ������� � ������ ����� �� ������ | 257 # ������ ��������������� ���������� � ������� � ������ ����� �� ������ |
258 if ((not defined($rhObject)) && $rhPrevObject) { | 258 if ((not defined($rhObject)) && $rhPrevObject) { |
259 $this->{$CurrentObject} = $rhPrevObject; | 259 $this->{$CurrentObject} = $rhPrevObject; |
260 return 1; | 260 return 1; |
261 } | 261 } |
262 | 262 |