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