comparison Lib/IMPL/Web/View/TTRegistry.pm @ 305:b5d5793f348e

TTView refactoring, still experiencing memory leaks
author sergey
date Wed, 17 Apr 2013 18:00:19 +0400
parents 2ff513227cb4
children 5e4e7c8fbca1
comparison
equal deleted inserted replaced
304:2ff513227cb4 305:b5d5793f348e
1 package IMPL::Web::View::TTRegistry; 1 package IMPL::Web::View::TTRegistry;
2 use strict; 2 use strict;
3 use mro;
3 4
4 use IMPL::Const qw(:prop); 5 use IMPL::Const qw(:prop);
5 use IMPL::declare { 6 use IMPL::declare {
6 require => { 7 require => {
7 TTFactory => 'IMPL::Web::View::TTFactory' 8 TTFactory => 'IMPL::Web::View::TTFactory'
8 }, 9 },
9 base => [ 10 base => [
10 'IMPL::Object' => undef 11 'IMPL::Object' => undef,
12 'IMPL::Object::Disposable' => undef
11 ], 13 ],
12 props => [ 14 props => [
13 loader => PROP_RW, 15 loader => PROP_RW,
14 context => PROP_RW, 16 context => PROP_RW,
15 _cache => PROP_RW, 17 _cache => PROP_RW,
16 ] 18 ]
17 }; 19 };
20
21 sub CTOR {
22 my ($this,$loader,$context) = @_;
23
24 $this->loader($loader);
25 $this->context($context);
26 $this->_cache({});
27 }
18 28
19 sub Require { 29 sub Require {
20 my ($this,$name) = @_; 30 my ($this,$name) = @_;
21 31
22 if(my $factory = $this->_cache->{$name}) { 32 if(my $factory = $this->_cache->{$name}) {
35 $this->_cache->{$name} = $factory; 45 $this->_cache->{$name} = $factory;
36 return $factory; 46 return $factory;
37 } 47 }
38 } 48 }
39 49
50 sub Dispose {
51 my ($this) = @_;
52
53 $this->_cache(undef);
54 $this->context(undef);
55 $this->loader(undef);
56
57 $this->next::method();
58 }
59
40 1; 60 1;
41 61
42 __END__ 62 __END__
63
64 =pod
65
66 =head1 NAME
67
68 C<IMPL::Web::View::Registry> - реестр шаблонов документа.
69
70 =head1 DESCRIPTION
71
72 Используется для реализации функции C<require> внутри шаблонов.
73
74
75
76 =cut