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