Mercurial > pub > Impl
diff Lib/IMPL/Object/Serializable.pm @ 49:16ada169ca75
migrating to the Eclipse IDE
author | wizard@linux-odin.local |
---|---|
date | Fri, 26 Feb 2010 10:49:21 +0300 |
parents | 03e58a454b20 |
children | c8fe3f84feba |
line wrap: on
line diff
--- a/Lib/IMPL/Object/Serializable.pm Fri Feb 26 01:43:42 2010 +0300 +++ b/Lib/IMPL/Object/Serializable.pm Fri Feb 26 10:49:21 2010 +0300 @@ -1,54 +1,54 @@ -package IMPL::Object::Serializable; -use strict; -use warnings; - -require IMPL::Exception; -use IMPL::Class::Property; - -sub restore { - my ($class,$data,$refSurrogate) = @_; - - if ($refSurrogate) { - $refSurrogate->callCTOR(@$data); - return $refSurrogate; - } else { - return $class->new(@$data); - } -} - -sub save { - my ($this,$ctx,$predicate) = @_; - - ($this->_get_save_method)->($this,$ctx); -} - -sub _get_save_method { - my ($class) = @_; - - $class = ref $class || $class; - - no strict 'refs'; - if (my $method = *{"${class}::_impl_auto_save"}{CODE}) { - return $method; - } else { - my $code = <<SAVE_METHOD; -package $class; -sub _impl_auto_save { - my (\$this,\$ctx) = \@_; -SAVE_METHOD - - $code .= - join "\n", map "\t".'$ctx->AddVar('.$_->Name.' => ' . - ((not ref $_->Mutators and $_->Mutators & prop_list) ? ('[$this->'.$_->Class.'::'.$_->Name.'()]') : ('$this->'.$_->Class.'::'.$_->Name.'()')) . - ') if defined ' . '$this->'.$_->Class.'::'.$_->Name.'()' . ';', grep $_->canGet, $class->get_meta('IMPL::Class::PropertyInfo',undef,1); - $code .= <<SAVE_METHOD; - -} -\\\&_impl_auto_save; -SAVE_METHOD - - return (eval $code || die new IMPL::Exception("Failed to generate serialization method",$class,$@)); - } -} - -1; +package IMPL::Object::Serializable; +use strict; +use warnings; + +require IMPL::Exception; +use IMPL::Class::Property; + +sub restore { + my ($class,$data,$refSurrogate) = @_; + + if ($refSurrogate) { + $refSurrogate->callCTOR(@$data); + return $refSurrogate; + } else { + return $class->new(@$data); + } +} + +sub save { + my ($this,$ctx,$predicate) = @_; + + ($this->_get_save_method)->($this,$ctx); +} + +sub _get_save_method { + my ($class) = @_; + + $class = ref $class || $class; + + no strict 'refs'; + if (my $method = *{"${class}::_impl_auto_save"}{CODE}) { + return $method; + } else { + my $code = <<SAVE_METHOD; +package $class; +sub _impl_auto_save { + my (\$this,\$ctx) = \@_; +SAVE_METHOD + + $code .= + join "\n", map "\t".'$ctx->AddVar('.$_->Name.' => ' . + ((not ref $_->Mutators and $_->Mutators & prop_list) ? ('[$this->'.$_->Class.'::'.$_->Name.'()]') : ('$this->'.$_->Class.'::'.$_->Name.'()')) . + ') if defined ' . '$this->'.$_->Class.'::'.$_->Name.'()' . ';', grep $_->canGet, $class->get_meta('IMPL::Class::PropertyInfo',undef,1); + $code .= <<SAVE_METHOD; + +} +\\\&_impl_auto_save; +SAVE_METHOD + + return (eval $code || die new IMPL::Exception("Failed to generate serialization method",$class,$@)); + } +} + +1;