lib/accessor.h
changeset 225 36d05588f91b
parent 222 8b1757417a54
child 227 560c1231ad1f
equal deleted inserted replaced
222:8b1757417a54 225:36d05588f91b
    18 #define __DECLARE_LOCATED(type, name)\
    18 #define __DECLARE_LOCATED(type, name)\
    19 	__IEC_##type##_p name;
    19 	__IEC_##type##_p name;
    20 
    20 
    21 
    21 
    22 // variable initialization macros
    22 // variable initialization macros
    23 #define __INIT_STRUCT(name, initial, retained)\
    23 #define __INIT_RETAIN(name, retained)\
    24     name.value = initial;\
    24     name.flags |= retained?__RETAIN_FLAG:0;
    25 	name.flags |= retained?RETAIN_FLAG:0;
       
    26 #define __INIT_VAR(name, initial, retained)\
    25 #define __INIT_VAR(name, initial, retained)\
    27 	__INIT_STRUCT(name, initial, retained)
    26 	name.value = initial;\
       
    27 	__INIT_RETAIN(name, retained)
    28 #define __INIT_GLOBAL(name, initial, retained)\
    28 #define __INIT_GLOBAL(name, initial, retained)\
    29 	__INIT_STRUCT((*GLOBAL__##name), initial, retained)
    29 	(*GLOBAL__##name).value = initial;\
       
    30 	__INIT_RETAIN((*GLOBAL__##name), retained)
    30 #define __INIT_GLOBAL_LOCATED(resource, name, location, retained)\
    31 #define __INIT_GLOBAL_LOCATED(resource, name, location, retained)\
    31 	__INIT_STRUCT(resource##__##name, location, retained)
    32 	resource##__##name.value = location;\
       
    33 	__INIT_RETAIN(resource##__##name, retained)
    32 #define __INIT_EXTERNAL(type, global, name, retained)\
    34 #define __INIT_EXTERNAL(type, global, name, retained)\
    33 	{extern __IEC_##type##_t *GLOBAL__##global;\
    35 	{extern __IEC_##type##_t *GLOBAL__##global;\
    34 	 __INIT_STRUCT(name, &((*GLOBAL__##global).value), retained)}
    36 	 name.value = &((*GLOBAL__##global).value);\
       
    37      __INIT_RETAIN(name, retained)}
    35 #define __INIT_LOCATED(type, location, name, retained)\
    38 #define __INIT_LOCATED(type, location, name, retained)\
    36 	{extern type *location;\
    39 	{extern type *location;\
    37 	 __INIT_STRUCT(name, location, retained)}
    40 	 name.value = location;\
       
    41 	 __INIT_RETAIN(name, retained)}
    38 #define __INIT_LOCATED_VALUE(name, initial)\
    42 #define __INIT_LOCATED_VALUE(name, initial)\
    39 	*(name.value) = initial;
    43 	*(name.value) = initial;
    40 
    44 
    41 
    45 
    42 // variable getting macros
    46 // variable getting macros
    43 #define __GET_VAR(name, ...)\
    47 #define __GET_VAR(name, ...)\
    44 	name.value __VA_ARGS__
    48 	name.value __VA_ARGS__
    45 #define __GET_EXTERNAL(name)\
    49 #define __GET_EXTERNAL(name, ...)\
    46 	name.flags & FORCE_FLAG ? name.fvalue : *(name.value)
    50 	(name.flags & __FORCE_FLAG) ? name.fvalue __VA_ARGS__ : *(name.value) __VA_ARGS__
    47 #define __GET_LOCATED(name)\
    51 #define __GET_LOCATED(name, ...)\
    48 	name.flags & FORCE_FLAG ? name.fvalue : *(name.value)
    52 	(name.flags & __FORCE_FLAG) ? name.fvalue __VA_ARGS__ : *(name.value) __VA_ARGS__
    49 #define __GET_VAR_BY_REF(name)\
    53 #define __GET_VAR_BY_REF(name)\
    50 	&(name)
    54 	&(name)
    51 #define __GET_EXTERNAL_BY_REF(name)\
    55 #define __GET_EXTERNAL_BY_REF(name)\
    52 	name.value
    56 	name.value
    53 #define __GET_LOCATED_BY_REF(name)\
    57 #define __GET_LOCATED_BY_REF(name)\
    54 	name.value
    58 	name.value
    55 
    59 
    56 // variable setting macros
    60 // variable setting macros
    57 #define __SET_VAR(name, new_value, ...)\
    61 #define __SET_VAR(name, new_value, ...)\
    58 	if (!(name.flags & FORCE_FLAG)) name.value __VA_ARGS__ = new_value
    62 	if (!(name.flags & __FORCE_FLAG)) name.value __VA_ARGS__ = new_value
    59 #define __SET_EXTERNAL(name, new_value)\
    63 #define __SET_EXTERNAL(name, new_value, ...)\
    60 	if (!(name.flags & FORCE_FLAG)) *(name.value) = new_value
    64 	if (!(name.flags & __FORCE_FLAG)) *(name.value) __VA_ARGS__ = new_value
    61 #define __SET_LOCATED(name, new_value)\
    65 #define __SET_LOCATED(name, new_value, ...)\
    62 	if (!(name.flags & FORCE_FLAG)) *(name.value) = new_value
    66 	if (!(name.flags & __FORCE_FLAG)) *(name.value) __VA_ARGS__ = new_value
    63 
    67 
    64 #endif //__ACCESSOR_H
    68 #endif //__ACCESSOR_H