stage4/generate_cc/iec_std_lib.h
changeset 38 6cce7d14647e
parent 36 4d7fd441fbc3
equal deleted inserted replaced
37:4d54ce47ee12 38:6cce7d14647e
    58 typedef struct timespec TIME;
    58 typedef struct timespec TIME;
    59 typedef struct timespec DATE;
    59 typedef struct timespec DATE;
    60 typedef struct timespec DT;
    60 typedef struct timespec DT;
    61 typedef struct timespec TOD;
    61 typedef struct timespec TOD;
    62 
    62 
       
    63 #define __TIME_CMP(t1, t2) (t2.tv_sec == t1.tv_sec ? t2.tv_nsec - t1.tv_nsec : t1.tv_sec - t2.tv_sec) 
       
    64 
    63 #define STR_MAX_LEN 40
    65 #define STR_MAX_LEN 40
    64 typedef int8_t __strlen_t;
    66 typedef int8_t __strlen_t;
    65 typedef struct {
    67 typedef struct {
    66     __strlen_t len;
    68     __strlen_t len;
    67     u_int8_t body[STR_MAX_LEN];
    69     u_int8_t body[STR_MAX_LEN];
    68 } STRING;
    70 } STRING;
       
    71 
       
    72 #define __STR_CMP(str1, str2) memcmp((char*)&str1.body,(char*)&str2.body, str1.len < str2.len ? str1.len : str2.len)
       
    73 
    69 
    74 
    70 /* TODO
    75 /* TODO
    71 typedef struct {
    76 typedef struct {
    72     __strlen_t len;
    77     __strlen_t len;
    73     u_int16_t body[STR_MAX_LEN];
    78     u_int16_t body[STR_MAX_LEN];
   687 
   692 
   688 /* Call previously defined macro for each concerned type */
   693 /* Call previously defined macro for each concerned type */
   689 ANY_NBIT(__limit_)
   694 ANY_NBIT(__limit_)
   690 ANY_NUM(__limit_)
   695 ANY_NUM(__limit_)
   691 
   696 
   692 inline TIME __limit_ptime( TIME* MN, TIME* IN, TIME* MX){
       
   693     return IN->tv_sec > MN->tv_sec || (IN->tv_sec == MN->tv_sec && IN->tv_nsec > MN->tv_nsec) ? /* IN>MN ?*/
       
   694            IN->tv_sec < MX->tv_sec || (IN->tv_sec == MX->tv_sec && IN->tv_nsec < MX->tv_nsec) ? /* IN<MX ?*/
       
   695            *IN : *MX : *MN;
       
   696 }
       
   697 
       
   698 #define __limit_time(TYPENAME)\
   697 #define __limit_time(TYPENAME)\
   699 inline TIME __limit_##TYPENAME( TYPENAME MN, TYPENAME IN, TYPENAME MX){\
   698 inline TIME __limit_##TYPENAME( TYPENAME MN, TYPENAME IN, TYPENAME MX){\
   700     return __limit_ptime(&MN, &IN, &MX);\
   699     return __TIME_CMP(IN, MN) > 0 ? /* IN>MN ?*/\
       
   700            __TIME_CMP(IN, MX) < 0 ? /* IN<MX ?*/\
       
   701            IN : MX : MN;\
   701 }
   702 }
   702 
   703 
   703 /* Call previously defined macro for each concerned type */
   704 /* Call previously defined macro for each concerned type */
   704 ANY_DATE(__limit_time)
   705 ANY_DATE(__limit_time)
   705 __limit_time(TIME)
   706 __limit_time(TIME)
   706 
   707 
   707 inline STRING __limit_STRING( STRING MN, STRING IN, STRING MX){
   708 inline STRING __limit_STRING( STRING MN, STRING IN, STRING MX){
   708     return strcmp((char*)&IN.body, (char*)&MN.body) > 0 ? strcmp((char*)&IN.body, (char*)&MX.body) < 0 ? IN : MX : MN;
   709     return __STR_CMP(IN, MN) > 0 ? __STR_CMP(IN, MX) < 0 ? IN : MX : MN;
   709 }
   710 }
   710 
   711 
   711     /**************/
   712     /**************/
   712     /*     MAX    */
   713     /*     MAX    */
   713     /**************/
   714     /**************/
   753 
   754 
   754 #define __max_num(TYPENAME) __extrem_(__max_,TYPENAME, op1 < tmp)
   755 #define __max_num(TYPENAME) __extrem_(__max_,TYPENAME, op1 < tmp)
   755 ANY_NBIT(__max_num)
   756 ANY_NBIT(__max_num)
   756 ANY_NUM(__max_num)
   757 ANY_NUM(__max_num)
   757 
   758 
   758 __extrem_(__max_, STRING, strcmp((char*)&op1.body,(char*)&tmp.body) < 0)
   759 __extrem_(__max_, STRING, __STR_CMP(op1,tmp) < 0)
   759 #define __max_time(TYPENAME) __extrem_(__max_, TYPENAME, tmp.tv_sec > op1.tv_sec || (tmp.tv_sec == op1.tv_sec && tmp.tv_nsec > op1.tv_nsec))
   760 #define __max_time(TYPENAME) __extrem_(__max_, TYPENAME, __TIME_CMP(op1, tmp) < 0)
   760 
   761 
   761 /* Call previously defined macro for each concerned type */
   762 /* Call previously defined macro for each concerned type */
   762 ANY_DATE(__max_time)
   763 ANY_DATE(__max_time)
   763 __max_time(TIME)
   764 __max_time(TIME)
   764 
   765 
   767     /**************/
   768     /**************/
   768 #define __min_num(TYPENAME) __extrem_(__min, TYPENAME, op1 > tmp)
   769 #define __min_num(TYPENAME) __extrem_(__min, TYPENAME, op1 > tmp)
   769 ANY_NBIT(__min_num)
   770 ANY_NBIT(__min_num)
   770 ANY_NUM(__min_num)
   771 ANY_NUM(__min_num)
   771 
   772 
   772 __extrem_(__min, STRING, strcmp((char*)&op1.body,(char*)&tmp.body) > 0)
   773 __extrem_(__min, STRING, __STR_CMP(op1,tmp) > 0)
   773 
   774 
   774 #define __min_time(TYPENAME) __extrem_(__min_, TYPENAME, tmp.tv_sec < op1.tv_sec || (tmp.tv_sec == op1.tv_sec && tmp.tv_nsec < op1.tv_nsec))
   775 #define __min_time(TYPENAME) __extrem_(__min_, TYPENAME, __TIME_CMP(op1, tmp) > 0)
   775 
   776 
   776 /* Call previously defined macro for each concerned type */
   777 /* Call previously defined macro for each concerned type */
   777 ANY_DATE(__min_time)
   778 ANY_DATE(__min_time)
   778 __min_time(TIME)
   779 __min_time(TIME)
   779 
   780 
   827   va_end (ap);                  /* Clean up.  */\
   828   va_end (ap);                  /* Clean up.  */\
   828   return 1;\
   829   return 1;\
   829 }
   830 }
   830 
   831 
   831 #define __compare_num(fname, TYPENAME, TEST) __compare_(fname, TYPENAME, op1 TEST tmp )
   832 #define __compare_num(fname, TYPENAME, TEST) __compare_(fname, TYPENAME, op1 TEST tmp )
   832 #define __compare_time(fname, TYPENAME, TEST) __compare_(fname, TYPENAME, op1.tv_sec TEST tmp.tv_sec || (op1.tv_sec == tmp.tv_sec && op1.tv_nsec TEST tmp.tv_nsec))
   833 #define __compare_time(fname, TYPENAME, TEST) __compare_(fname, TYPENAME, __TIME_CMP(op1, tmp) TEST 0)
   833 #define __compare_string(fname, TEST) __compare_(fname, STRING, strcmp((char*)&op1.body, (char*)&tmp.body) TEST 0 )
   834 #define __compare_string(fname, TEST) __compare_(fname, STRING, __STR_CMP(op1, tmp) TEST 0 )
   834 
   835 
   835     /**************/
   836     /**************/
   836     /*     GT     */
   837     /*     GT     */
   837     /**************/
   838     /**************/
   838 
   839