lib/accessor.h
changeset 706 31553c22f318
parent 403 b6568471de90
child 708 6cc8255ecfe4
equal deleted inserted replaced
705:f2323f79252e 706:31553c22f318
    16 		return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\
    16 		return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\
    17 	}\
    17 	}\
    18 	type* __GET_GLOBAL_##name(void) {\
    18 	type* __GET_GLOBAL_##name(void) {\
    19 		return &((*GLOBAL__##name).value);\
    19 		return &((*GLOBAL__##name).value);\
    20 	}
    20 	}
       
    21 #define __DECLARE_GLOBAL_FB(type, domain, name)\
       
    22 	type domain##__##name;\
       
    23 	static type *GLOBAL__##name = &(domain##__##name);\
       
    24 	type* __GET_GLOBAL_##name(void) {\
       
    25 		return &(*GLOBAL__##name);\
       
    26 	}
    21 #define __DECLARE_GLOBAL_LOCATION(type, location)\
    27 #define __DECLARE_GLOBAL_LOCATION(type, location)\
    22 	extern type *location;
    28 	extern type *location;
    23 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\
    29 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\
    24 	__IEC_##type##_p resource##__##name;\
    30 	__IEC_##type##_p resource##__##name;\
    25 	static __IEC_##type##_p *GLOBAL__##name = &(resource##__##name);\
    31 	static __IEC_##type##_p *GLOBAL__##name = &(resource##__##name);\
    34 	}
    40 	}
    35 #define __DECLARE_GLOBAL_PROTOTYPE(type, name)\
    41 #define __DECLARE_GLOBAL_PROTOTYPE(type, name)\
    36     extern type* __GET_GLOBAL_##name();
    42     extern type* __GET_GLOBAL_##name();
    37 #define __DECLARE_EXTERNAL(type, name)\
    43 #define __DECLARE_EXTERNAL(type, name)\
    38 	__IEC_##type##_p name;
    44 	__IEC_##type##_p name;
       
    45 #define __DECLARE_EXTERNAL_FB(type, name)\
       
    46 	type* name;
    39 #define __DECLARE_LOCATED(type, name)\
    47 #define __DECLARE_LOCATED(type, name)\
    40 	__IEC_##type##_p name;
    48 	__IEC_##type##_p name;
    41 
    49 
    42 
    50 
    43 // variable initialization macros
    51 // variable initialization macros
    50     {\
    58     {\
    51 	    static const type temp = initial;\
    59 	    static const type temp = initial;\
    52 	    __INIT_GLOBAL_##name(temp);\
    60 	    __INIT_GLOBAL_##name(temp);\
    53 	    __INIT_RETAIN((*GLOBAL__##name), retained)\
    61 	    __INIT_RETAIN((*GLOBAL__##name), retained)\
    54     }
    62     }
       
    63 #define __INIT_GLOBAL_FB(type, name, retained)\
       
    64 	type##_init__(&(*GLOBAL__##name), retained);
    55 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\
    65 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\
    56 	domain##__##name.value = location;\
    66 	domain##__##name.value = location;\
    57 	__INIT_RETAIN(domain##__##name, retained)
    67 	__INIT_RETAIN(domain##__##name, retained)
    58 #define __INIT_EXTERNAL(type, global, name, retained)\
    68 #define __INIT_EXTERNAL(type, global, name, retained)\
    59     {\
    69     {\
    60 		name.value = __GET_GLOBAL_##global();\
    70 		name.value = __GET_GLOBAL_##global();\
    61 		__INIT_RETAIN(name, retained)\
    71 		__INIT_RETAIN(name, retained)\
    62     }
    72     }
       
    73 #define __INIT_EXTERNAL_FB(type, global, name, retained)\
       
    74 	name = __GET_GLOBAL_##global();
    63 #define __INIT_LOCATED(type, location, name, retained)\
    75 #define __INIT_LOCATED(type, location, name, retained)\
    64 	{\
    76 	{\
    65 		extern type *location;\
    77 		extern type *location;\
    66 		name.value = location;\
    78 		name.value = location;\
    67 		__INIT_RETAIN(name, retained)\
    79 		__INIT_RETAIN(name, retained)\
    73 // variable getting macros
    85 // variable getting macros
    74 #define __GET_VAR(name, ...)\
    86 #define __GET_VAR(name, ...)\
    75 	name.value __VA_ARGS__
    87 	name.value __VA_ARGS__
    76 #define __GET_EXTERNAL(name, ...)\
    88 #define __GET_EXTERNAL(name, ...)\
    77 	((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__)
    89 	((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__)
       
    90 #define __GET_EXTERNAL_FB(name, ...)\
       
    91 	__GET_VAR(((*name) __VA_ARGS__))
    78 #define __GET_LOCATED(name, ...)\
    92 #define __GET_LOCATED(name, ...)\
    79 	((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__)
    93 	((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__)
    80 #define __GET_VAR_BY_REF(name, ...)\
    94 #define __GET_VAR_BY_REF(name, ...)\
    81 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__))
    95 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__))
    82 #define __GET_EXTERNAL_BY_REF(name, ...)\
    96 #define __GET_EXTERNAL_BY_REF(name, ...)\
    83 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__))
    97 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__))
       
    98 #define __GET_EXTERNAL_FB_BY_REF(name, ...)\
       
    99 	__GET_EXTERNAL_BY_REF(((*name) __VA_ARGS__))
    84 #define __GET_LOCATED_BY_REF(name, ...)\
   100 #define __GET_LOCATED_BY_REF(name, ...)\
    85 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__))
   101 	((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__))
    86 
   102 
    87 // variable setting macros
   103 // variable setting macros
    88 #define __SET_VAR(prefix, name, new_value, ...)\
   104 #define __SET_VAR(prefix, name, new_value, ...)\
    89 	if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value
   105 	if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value
    90 #define __SET_EXTERNAL(prefix, name, new_value, ...)\
   106 #define __SET_EXTERNAL(prefix, name, new_value, ...)\
    91 	if (!(prefix name.flags & __IEC_FORCE_FLAG || __IS_GLOBAL_##name##_FORCED()))\
   107 	if (!(prefix name.flags & __IEC_FORCE_FLAG || __IS_GLOBAL_##name##_FORCED()))\
    92 		(*(prefix name.value)) __VA_ARGS__ = new_value
   108 		(*(prefix name.value)) __VA_ARGS__ = new_value
       
   109 #define __SET_EXTERNAL_FB(prefix, name, new_value, ...)\
       
   110 	__SET_VAR((*(prefix name)), __VA_ARGS__, new_value)
    93 #define __SET_LOCATED(prefix, name, new_value, ...)\
   111 #define __SET_LOCATED(prefix, name, new_value, ...)\
    94 	if (!(prefix name.flags & __IEC_FORCE_FLAG)) *(prefix name.value) __VA_ARGS__ = new_value
   112 	if (!(prefix name.flags & __IEC_FORCE_FLAG)) *(prefix name.value) __VA_ARGS__ = new_value
    95 
   113 
    96 #endif //__ACCESSOR_H
   114 #endif //__ACCESSOR_H