723 static inline to_TYPENAME from_TYPENAME##_TO_##to_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
723 static inline to_TYPENAME from_TYPENAME##_TO_##to_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
724 TEST_EN(to_TYPENAME)\ |
724 TEST_EN(to_TYPENAME)\ |
725 return (to_TYPENAME)oper(op);\ |
725 return (to_TYPENAME)oper(op);\ |
726 } |
726 } |
727 |
727 |
|
728 /******** [ANY_NUM | ANY_NBIT]_TO_BOOL ************/ |
|
729 #define __convert_num_to_bool(TYPENAME) \ |
|
730 static inline BOOL TYPENAME##_TO_BOOL(EN_ENO_PARAMS, TYPENAME op){\ |
|
731 TEST_EN(BOOL)\ |
|
732 return op == 0 ? 0 : 1;\ |
|
733 } |
|
734 __ANY_NUM(__convert_num_to_bool) |
|
735 __ANY_NBIT(__convert_num_to_bool) |
|
736 |
|
737 /******** [TIME | ANY_DATE]_TO_BOOL ************/ |
|
738 #define __convert_time_to_bool(TYPENAME) \ |
|
739 static inline BOOL TYPENAME##_TO_BOOL(EN_ENO_PARAMS, TYPENAME op){\ |
|
740 TEST_EN(BOOL)\ |
|
741 return op.tv_sec == 0 && op.tv_nsec == 0 ? 0 : 1;\ |
|
742 } |
|
743 __convert_time_to_bool(TIME) |
|
744 __ANY_DATE(__convert_time_to_bool) |
728 |
745 |
729 #define __to_anynum_(from_TYPENAME) __ANY_NUM_1(__iec_,from_TYPENAME) |
746 #define __to_anynum_(from_TYPENAME) __ANY_NUM_1(__iec_,from_TYPENAME) |
730 #define __to_anyint_(from_TYPENAME) __ANY_INT_1(__iec_,from_TYPENAME) |
747 #define __to_anyint_(from_TYPENAME) __ANY_INT_1(__iec_,from_TYPENAME) |
731 #define __to_anybit_(from_TYPENAME) __ANY_BIT_1(__iec_,from_TYPENAME) |
748 #define __to_anybit_(from_TYPENAME) __ANY_BIT_1(__iec_,from_TYPENAME) |
732 #define __to_anynbit_(from_TYPENAME) __ANY_NBIT_1(__iec_,from_TYPENAME) |
749 #define __to_anynbit_(from_TYPENAME) __ANY_NBIT_1(__iec_,from_TYPENAME) |
733 #define __to_anysint_(from_TYPENAME) __ANY_SINT_1(__iec_,from_TYPENAME) |
750 #define __to_anysint_(from_TYPENAME) __ANY_SINT_1(__iec_,from_TYPENAME) |
734 #define __to_anyuint_(from_TYPENAME) __ANY_UINT_1(__iec_,from_TYPENAME) |
751 #define __to_anyuint_(from_TYPENAME) __ANY_UINT_1(__iec_,from_TYPENAME) |
735 #define __to_anyreal_(from_TYPENAME) __ANY_REAL_1(__iec_,from_TYPENAME) |
752 #define __to_anyreal_(from_TYPENAME) __ANY_REAL_1(__iec_,from_TYPENAME) |
736 #define __to_anydate_(from_TYPENAME) __ANY_DATE_1(__iec_,from_TYPENAME) |
753 #define __to_anydate_(from_TYPENAME) __ANY_DATE_1(__iec_,from_TYPENAME) |
737 |
754 |
738 /******** [ANY_BIT]_TO_[ANY_NUM | ANT_BIT] ************/ |
755 /******** [ANY_BIT]_TO_[ANY_NUM | ANT_NBIT] ************/ |
739 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __move_##to_TYPENAME) |
756 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __move_##to_TYPENAME) |
740 __ANY_BIT(__to_anynum_) |
757 __ANY_BIT(__to_anynum_) |
741 __ANY_BIT(__to_anybit_) |
758 __ANY_BIT(__to_anynbit_) |
742 #undef __iec_ |
759 #undef __iec_ |
743 |
760 |
744 /******** [ANY_INT]_TO_[ANY_NUM | ANT_BIT] ************/ |
761 /******** [ANY_INT]_TO_[ANY_NUM | ANT_NBIT] ************/ |
745 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __move_##to_TYPENAME) |
762 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __move_##to_TYPENAME) |
746 __ANY_INT(__to_anynum_) |
763 __ANY_INT(__to_anynum_) |
747 __ANY_INT(__to_anybit_) |
764 __ANY_INT(__to_anynbit_) |
748 #undef __iec_ |
765 #undef __iec_ |
749 |
766 |
750 /******** [ANY_REAL]_TO_[ANY_BIT] ************/ |
767 /******** [ANY_REAL]_TO_[ANY_NBIT] ************/ |
751 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_bit) |
768 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_bit) |
752 __ANY_REAL(__to_anybit_) |
769 __ANY_REAL(__to_anynbit_) |
753 #undef __iec_ |
770 #undef __iec_ |
754 |
771 |
755 /******** [ANY_REAL]_TO_[ANY_INT] ************/ |
772 /******** [ANY_REAL]_TO_[ANY_NINT] ************/ |
756 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_sint) |
773 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_sint) |
757 __ANY_REAL(__to_anysint_) |
774 __ANY_REAL(__to_anysint_) |
758 #undef __iec_ |
775 #undef __iec_ |
759 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_uint) |
776 #define __iec_(to_TYPENAME,from_TYPENAME) __convert_type(from_TYPENAME, to_TYPENAME, __real_to_uint) |
760 __ANY_REAL(__to_anyuint_) |
777 __ANY_REAL(__to_anyuint_) |
1129 /* MOD */ |
1146 /* MOD */ |
1130 /**************/ |
1147 /**************/ |
1131 #define __mod(TYPENAME)\ |
1148 #define __mod(TYPENAME)\ |
1132 /* The explicitly typed standard functions */\ |
1149 /* The explicitly typed standard functions */\ |
1133 static inline TYPENAME MOD_##TYPENAME(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
1150 static inline TYPENAME MOD_##TYPENAME(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
1134 TEST_EN_COND(TYPENAME, op2 == 0)\ |
1151 TEST_EN(TYPENAME)\ |
|
1152 if (op2 == 0) return 0;\ |
1135 return op1 % op2;\ |
1153 return op1 % op2;\ |
1136 }\ |
1154 }\ |
1137 /* The overloaded standard functions */\ |
1155 /* The overloaded standard functions */\ |
1138 static inline TYPENAME MOD__##TYPENAME##__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
1156 static inline TYPENAME MOD__##TYPENAME##__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
1139 return DIV_##TYPENAME(EN_ENO, op1, op2);\ |
1157 return MOD_##TYPENAME(EN_ENO, op1, op2);\ |
1140 } |
1158 } |
1141 __ANY_INT(__mod) |
1159 __ANY_INT(__mod) |
1142 |
1160 |
1143 /**************/ |
1161 /**************/ |
1144 /* EXPT */ |
1162 /* EXPT */ |
1547 * unlike remaining functions, that start off at 1. |
1565 * unlike remaining functions, that start off at 1. |
1548 */ |
1566 */ |
1549 /* The explicitly typed standard functions */ |
1567 /* The explicitly typed standard functions */ |
1550 #define __in1_anyint_(in2_TYPENAME) __ANY_INT_1(__iec_,in2_TYPENAME) |
1568 #define __in1_anyint_(in2_TYPENAME) __ANY_INT_1(__iec_,in2_TYPENAME) |
1551 #define __iec_(in1_TYPENAME,in2_TYPENAME) \ |
1569 #define __iec_(in1_TYPENAME,in2_TYPENAME) \ |
1552 static inline in2_TYPENAME MUX__##in2_TYPENAME##__##in1_TYPENAME##__##in2_TYPENAME(EN_ENO_PARAMS, UINT param_count, in1_TYPENAME K, ...){\ |
1570 static inline in2_TYPENAME MUX__##in2_TYPENAME##__##in1_TYPENAME##__##in2_TYPENAME(EN_ENO_PARAMS, in1_TYPENAME K, UINT param_count, ...){\ |
1553 va_list ap;\ |
1571 va_list ap;\ |
1554 UINT i;\ |
1572 UINT i;\ |
1555 in2_TYPENAME tmp;\ |
1573 in2_TYPENAME tmp;\ |
1556 TEST_EN_COND(in2_TYPENAME, K >= param_count)\ |
1574 TEST_EN_COND(in2_TYPENAME, K >= param_count)\ |
1557 tmp = __INIT_##in2_TYPENAME;\ |
1575 tmp = __INIT_##in2_TYPENAME;\ |
1558 \ |
1576 \ |
1559 va_start (ap, K); /* Initialize the argument list. */\ |
1577 va_start (ap, param_count); /* Initialize the argument list. */\ |
1560 \ |
1578 \ |
1561 for (i = 0; i < param_count; i++){\ |
1579 for (i = 0; i < param_count; i++){\ |
1562 if(K == i){\ |
1580 if(K == i){\ |
1563 tmp = va_arg (ap, VA_ARGS_##in2_TYPENAME);\ |
1581 tmp = va_arg (ap, VA_ARGS_##in2_TYPENAME);\ |
1564 va_end (ap); /* Clean up. */\ |
1582 va_end (ap); /* Clean up. */\ |
1732 |
1750 |
1733 |
1751 |
1734 /**************/ |
1752 /**************/ |
1735 /* NE */ |
1753 /* NE */ |
1736 /**************/ |
1754 /**************/ |
|
1755 |
|
1756 #define __ne_num(fname, TYPENAME) \ |
|
1757 static inline BOOL fname(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
|
1758 TEST_EN(BOOL)\ |
|
1759 return op1 != op2 ? 1 : 0;\ |
|
1760 } |
|
1761 |
|
1762 #define __ne_time(fname, TYPENAME) \ |
|
1763 static inline BOOL fname(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\ |
|
1764 TEST_EN(BOOL)\ |
|
1765 return __time_cmp(op1, op2) != 0 ? 1 : 0;\ |
|
1766 } |
|
1767 |
|
1768 |
1737 /* Comparison for numerical data types */ |
1769 /* Comparison for numerical data types */ |
1738 #define __iec_(TYPENAME) \ |
1770 #define __iec_(TYPENAME) \ |
1739 __compare_num(NE_##TYPENAME, TYPENAME, != ) /* The explicitly typed standard functions */\ |
1771 __ne_num(NE_##TYPENAME, TYPENAME) /* The explicitly typed standard functions */\ |
1740 __compare_num(NE__BOOL__##TYPENAME##__##TYPENAME, TYPENAME, != ) /* Overloaded function */ |
1772 __ne_num(NE__BOOL__##TYPENAME##__##TYPENAME, TYPENAME) /* Overloaded function */ |
1741 __ANY_NBIT(__iec_) |
1773 __ANY_NBIT(__iec_) |
1742 __ANY_NUM(__iec_) |
1774 __ANY_NUM(__iec_) |
1743 #undef __iec_ |
1775 #undef __iec_ |
1744 |
1776 |
1745 /* Comparison for time data types */ |
1777 /* Comparison for time data types */ |
1746 #define __iec_(TYPENAME) \ |
1778 #define __iec_(TYPENAME) \ |
1747 __compare_time(NE_##TYPENAME, TYPENAME, != ) /* The explicitly typed standard functions */\ |
1779 __ne_time(NE_##TYPENAME, TYPENAME) /* The explicitly typed standard functions */\ |
1748 __compare_time(NE__BOOL__##TYPENAME##__##TYPENAME, TYPENAME, != ) /* Overloaded function */ |
1780 __ne_time(NE__BOOL__##TYPENAME##__##TYPENAME, TYPENAME) /* Overloaded function */ |
1749 __ANY_DATE(__iec_) |
1781 __ANY_DATE(__iec_) |
1750 __iec_(TIME) |
1782 __iec_(TIME) |
1751 #undef __iec_ |
1783 #undef __iec_ |
1752 |
1784 |
1753 /* Comparison for string data types */ |
1785 /* Comparison for string data types */ |