comparison lib/IMPL/Class/Property.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::Class::Property;
2 use strict;
3 use parent qw(Exporter);
4
5 BEGIN {
6 our @EXPORT = qw(property prop_get prop_set owner_set prop_none prop_all prop_list CreateProperty);
7 }
8
9 use IMPL::lang qw(:hash);
10 use IMPL::Const qw(:prop);
11 use Carp qw(carp);
12 require IMPL::Class::Member;
13
14 sub import {
15 __PACKAGE__->export_to_level(1,@_);
16 IMPL::Class::Member->export_to_level(1,@_);
17 }
18
19 sub prop_get { 1 };
20 sub prop_set { 2 };
21 sub owner_set { 10 };
22 sub prop_none { 0 };
23 sub prop_all { 3 };
24 sub prop_list { 4 };
25
26 sub property($$) {
27 my ($propName,$attributes) = @_;
28
29 my $class = caller;
30
31 return hashMerge (
32 $class->ClassPropertyImplementor->NormalizeSpecification($attributes),
33 {
34 implementor => $class->ClassPropertyImplementor,
35 name => $propName,
36 class => scalar(caller),
37 }
38 );
39 }
40
41 sub CreateProperty {
42 my ($class,$propName,@attributes) = @_;
43
44 $class
45 ->ClassPropertyImplementor
46 ->Implement(
47 @attributes,
48 {
49 name => $propName,
50 class => $class,
51 }
52 );
53 };
54
55 1;