comparison lib/IMPL/Config/Hierarchy.pm @ 413:af8d359ee4cc ref20150831

working on di container
author cin
date Thu, 24 Sep 2015 12:19:30 +0300
parents 30e8c6a74937
children ec6f2d389d1e
comparison
equal deleted inserted replaced
412:30e8c6a74937 413:af8d359ee4cc
48 return [] unless $role; 48 return [] unless $role;
49 49
50 my $cache = $this->{$_cache}{$role}; 50 my $cache = $this->{$_cache}{$role};
51 51
52 unless ($cache) { 52 unless ($cache) {
53 $cache = {}; 53 $cache = { $role, 0 };
54 54
55 my @roles = ($role); 55 my @roles = [$role, 0];
56 56
57 while (my $r = shift @roles ) { 57 while (my $r = shift @roles ) {
58 next if $cache->{$r}; 58 my ($name, $level) = @$r;
59 59
60 $cache->{$r} = 1; 60 $cache->{$name} = $level;
61 if(my $parents = $this->{$roles}{$r}) { 61 if(my $parents = $this->{$roles}{$name}) {
62 push @roles, @$parents; 62 foreach my $p (@$parents) {
63 next if $cache{$p};
64 push @roles, [$p, $cache{$p} = $level + 1];
65 }
63 } 66 }
64 } 67 }
65 $this->{$_cache}{$role} = $cache; 68 $this->{$_cache}{$role} = $cache;
66 } 69 }
67 70