lib/iec_std_lib.h
changeset 696 7530eae6786d
parent 625 c0bda77b37a0
child 700 b0ef6711f2a8
equal deleted inserted replaced
695:5760f1043ba4 696:7530eae6786d
  1834 static inline STRING LEFT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\
  1834 static inline STRING LEFT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\
  1835     STRING res;\
  1835     STRING res;\
  1836     TEST_EN_COND(STRING, L < 0)\
  1836     TEST_EN_COND(STRING, L < 0)\
  1837     res = __INIT_STRING;\
  1837     res = __INIT_STRING;\
  1838     L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\
  1838     L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\
  1839     memcpy(&res.body, &IN.body, L);\
  1839     memcpy(&res.body, &IN.body, (size_t)L);\
  1840     res.len = L;\
  1840     res.len = (__strlen_t)L;\
  1841     return res;\
  1841     return res;\
  1842 }
  1842 }
  1843 __ANY_INT(__left)
  1843 __ANY_INT(__left)
  1844 
  1844 
  1845 
  1845 
  1851 static inline STRING RIGHT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\
  1851 static inline STRING RIGHT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\
  1852   STRING res;\
  1852   STRING res;\
  1853   TEST_EN_COND(STRING, L < 0)\
  1853   TEST_EN_COND(STRING, L < 0)\
  1854   res = __INIT_STRING;\
  1854   res = __INIT_STRING;\
  1855   L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\
  1855   L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\
  1856   memcpy(&res.body, &IN.body[(TYPENAME)IN.len - L], L);\
  1856   memcpy(&res.body, &IN.body[(TYPENAME)IN.len - L], (size_t)L);\
  1857   res.len = L;\
  1857   res.len = (__strlen_t)L;\
  1858   return res;\
  1858   return res;\
  1859 }
  1859 }
  1860 __ANY_INT(__right)
  1860 __ANY_INT(__right)
  1861 
  1861 
  1862 
  1862 
  1870   TEST_EN_COND(STRING, L < 0 || P < 0)\
  1870   TEST_EN_COND(STRING, L < 0 || P < 0)\
  1871   res = __INIT_STRING;\
  1871   res = __INIT_STRING;\
  1872   if(P <= (TYPENAME)IN.len){\
  1872   if(P <= (TYPENAME)IN.len){\
  1873 	P -= 1; /* now can be used as [index]*/\
  1873 	P -= 1; /* now can be used as [index]*/\
  1874 	L = L + P <= (TYPENAME)IN.len ? L : (TYPENAME)IN.len - P;\
  1874 	L = L + P <= (TYPENAME)IN.len ? L : (TYPENAME)IN.len - P;\
  1875 	memcpy(&res.body, &IN.body[P] , L);\
  1875 	memcpy(&res.body, &IN.body[P] , (size_t)L);\
  1876 	res.len = L;\
  1876 	res.len = (__strlen_t)L;\
  1877   }\
  1877   }\
  1878   return res;\
  1878   return res;\
  1879 }
  1879 }
  1880 __ANY_INT(__mid)
  1880 __ANY_INT(__mid)
  1881 
  1881 
  1935 }
  1935 }
  1936 
  1936 
  1937 #define __iec_(TYPENAME) \
  1937 #define __iec_(TYPENAME) \
  1938 static inline STRING INSERT__STRING__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING str1, STRING str2, TYPENAME P){\
  1938 static inline STRING INSERT__STRING__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING str1, STRING str2, TYPENAME P){\
  1939   TEST_EN_COND(STRING, P < 0)\
  1939   TEST_EN_COND(STRING, P < 0)\
  1940   return (STRING)__insert(str1,str2,P);\
  1940   return (STRING)__insert(str1,str2,(__strlen_t)P);\
  1941 }
  1941 }
  1942 __ANY_INT(__iec_)
  1942 __ANY_INT(__iec_)
  1943 #undef __iec_
  1943 #undef __iec_
  1944 
  1944 
  1945 
  1945 
  1966 }
  1966 }
  1967 
  1967 
  1968 #define __iec_(TYPENAME) \
  1968 #define __iec_(TYPENAME) \
  1969 static inline STRING DELETE__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING str, TYPENAME L, TYPENAME P){\
  1969 static inline STRING DELETE__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING str, TYPENAME L, TYPENAME P){\
  1970   TEST_EN_COND(STRING, L < 0 || P < 0)\
  1970   TEST_EN_COND(STRING, L < 0 || P < 0)\
  1971   return (STRING)__delete(str,L,P);\
  1971   return (STRING)__delete(str,(__strlen_t)L,(__strlen_t)P);\
  1972 }
  1972 }
  1973 __ANY_INT(__iec_)
  1973 __ANY_INT(__iec_)
  1974 #undef __iec_
  1974 #undef __iec_
  1975 
  1975 
  1976 
  1976 
  2007 }
  2007 }
  2008 
  2008 
  2009 #define __iec_(TYPENAME) \
  2009 #define __iec_(TYPENAME) \
  2010 static inline STRING REPLACE__STRING__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING str1, STRING str2, TYPENAME L, TYPENAME P){\
  2010 static inline STRING REPLACE__STRING__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING str1, STRING str2, TYPENAME L, TYPENAME P){\
  2011   TEST_EN_COND(STRING, L < 0 || P < 0)\
  2011   TEST_EN_COND(STRING, L < 0 || P < 0)\
  2012   return (STRING)__replace(str1,str2,L,P);\
  2012   return (STRING)__replace(str1,str2,(__strlen_t)L,(__strlen_t)P);\
  2013 }
  2013 }
  2014 __ANY_INT(__iec_)
  2014 __ANY_INT(__iec_)
  2015 #undef __iec_
  2015 #undef __iec_
  2016 
  2016 
  2017     /****************/
  2017     /****************/
  2103 
  2103 
  2104 /***  MULTIME  ***/
  2104 /***  MULTIME  ***/
  2105 #define __iec_(TYPENAME)\
  2105 #define __iec_(TYPENAME)\
  2106 static inline TIME MULTIME__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2106 static inline TIME MULTIME__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2107   TEST_EN(TIME)\
  2107   TEST_EN(TIME)\
  2108   return __time_mul(IN1, IN2);\
  2108   return __time_mul(IN1, (LREAL)IN2);\
  2109 }
  2109 }
  2110 __ANY_NUM(__iec_)
  2110 __ANY_NUM(__iec_)
  2111 #undef __iec_
  2111 #undef __iec_
  2112 
  2112 
  2113 /***  MUL  ***/
  2113 /***  MUL  ***/
  2114 #define __iec_(TYPENAME)\
  2114 #define __iec_(TYPENAME)\
  2115 static inline TIME MUL__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2115 static inline TIME MUL__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2116   TEST_EN(TIME)\
  2116   TEST_EN(TIME)\
  2117   return __time_mul(IN1, IN2);\
  2117   return __time_mul(IN1, (LREAL)IN2);\
  2118 }
  2118 }
  2119 __ANY_NUM(__iec_)
  2119 __ANY_NUM(__iec_)
  2120 #undef __iec_
  2120 #undef __iec_
  2121 
  2121 
  2122 /***  DIVTIME  ***/
  2122 /***  DIVTIME  ***/
  2123 #define __iec_(TYPENAME)\
  2123 #define __iec_(TYPENAME)\
  2124 static inline TIME DIVTIME__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2124 static inline TIME DIVTIME__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2125   TEST_EN(TIME)\
  2125   TEST_EN(TIME)\
  2126   return __time_div(IN1, IN2);\
  2126   return __time_div(IN1, (LREAL)IN2);\
  2127 }
  2127 }
  2128 __ANY_NUM(__iec_)
  2128 __ANY_NUM(__iec_)
  2129 #undef __iec_
  2129 #undef __iec_
  2130 
  2130 
  2131 /***  DIV  ***/
  2131 /***  DIV  ***/
  2132 #define __iec_(TYPENAME)\
  2132 #define __iec_(TYPENAME)\
  2133 static inline TIME DIV__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2133 static inline TIME DIV__TIME__TIME__##TYPENAME(EN_ENO_PARAMS, TIME IN1, TYPENAME IN2){\
  2134   TEST_EN(TIME)\
  2134   TEST_EN(TIME)\
  2135   return __time_div(IN1, IN2);\
  2135   return __time_div(IN1, (LREAL)IN2);\
  2136 }
  2136 }
  2137 __ANY_NUM(__iec_)
  2137 __ANY_NUM(__iec_)
  2138 #undef __iec_
  2138 #undef __iec_
  2139 
  2139 
  2140 /*** CONCAT_DATE_TOD ***/
  2140 /*** CONCAT_DATE_TOD ***/