Mercurial > pub > Impl
comparison Lib/IMPL/Class/Meta.pm @ 369:7c784144d2f1
Implemented object metadata class, cleanup
author | cin |
---|---|
date | Mon, 09 Dec 2013 17:35:34 +0400 |
parents | c6d0f889ef87 |
children |
comparison
equal
deleted
inserted
replaced
368:010ceafd0c5a | 369:7c784144d2f1 |
---|---|
25 sub GetMeta { | 25 sub GetMeta { |
26 my ($class,$meta_class,$predicate,$deep) = @_; | 26 my ($class,$meta_class,$predicate,$deep) = @_; |
27 $class = ref $class if ref $class; | 27 $class = ref $class if ref $class; |
28 no strict 'refs'; | 28 no strict 'refs'; |
29 my @result; | 29 my @result; |
30 | |
31 if ($deep) { | |
32 @result = map { $_->can('GetMeta') ? $_->GetMeta($meta_class,$predicate,$deep) : () } @{$class.'::ISA'}; | |
33 } | |
34 | 30 |
35 if ($predicate) { | 31 if ($predicate) { |
36 push @result,grep( &$predicate($_), map( @{$class_meta{$class}{$_}}, grep( $_->isa($meta_class), keys %{$class_meta{$class} || {}} ) ) ); | 32 push @result,grep( &$predicate($_), map( @{$class_meta{$class}{$_}}, grep( $_->isa($meta_class), keys %{$class_meta{$class} || {}} ) ) ); |
37 } else { | 33 } else { |
38 push @result, map( @{$class_meta{$class}{$_} || []}, grep( $_->isa($meta_class), keys %{$class_meta{$class} || {}} ) ); | 34 push @result, map( @{$class_meta{$class}{$_} || []}, grep( $_->isa($meta_class), keys %{$class_meta{$class} || {}} ) ); |
39 } | 35 } |
36 | |
37 if ($deep) { | |
38 push @result, map { $_->can('GetMeta') ? $_->GetMeta($meta_class,$predicate,$deep) : () } @{$class.'::ISA'}; | |
39 } | |
40 | |
40 wantarray ? @result : \@result; | 41 wantarray ? @result : \@result; |
41 } | 42 } |
42 | 43 |
43 sub get_meta { | 44 sub get_meta { |
44 goto &GetMeta; | 45 goto &GetMeta; |