equal
deleted
inserted
replaced
1852 |
1852 |
1853 /****************/ |
1853 /****************/ |
1854 /* LEFT */ |
1854 /* LEFT */ |
1855 /****************/ |
1855 /****************/ |
1856 |
1856 |
1857 static inline STRING __left(STRING IN, __strlen_t L){ |
1857 #define __left(TYPENAME) \ |
1858 STRING res; |
1858 static inline STRING LEFT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\ |
1859 res = __INIT_STRING; |
1859 STRING res;\ |
1860 L = L < IN.len ? L : IN.len; |
1860 TEST_EN_COND(STRING, L < 0)\ |
1861 memcpy(&res.body, &IN.body, L); |
1861 res = __INIT_STRING;\ |
1862 res.len = L; |
1862 L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\ |
1863 return res; |
1863 memcpy(&res.body, &IN.body, L);\ |
1864 } |
1864 res.len = L;\ |
1865 |
1865 return res;\ |
1866 #define __iec_(TYPENAME) \ |
1866 } |
1867 static inline STRING LEFT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING str, TYPENAME L){\ |
1867 __ANY_INT(__left) |
1868 TEST_EN_COND(STRING, L < 0)\ |
|
1869 return (STRING)__left(str,L);\ |
|
1870 } |
|
1871 __ANY_INT(__iec_) |
|
1872 #undef __iec_ |
|
1873 |
1868 |
1874 |
1869 |
1875 /*****************/ |
1870 /*****************/ |
1876 /* RIGHT */ |
1871 /* RIGHT */ |
1877 /*****************/ |
1872 /*****************/ |
1879 #define __right(TYPENAME) \ |
1874 #define __right(TYPENAME) \ |
1880 static inline STRING RIGHT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\ |
1875 static inline STRING RIGHT__STRING__STRING__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L){\ |
1881 STRING res;\ |
1876 STRING res;\ |
1882 TEST_EN_COND(STRING, L < 0)\ |
1877 TEST_EN_COND(STRING, L < 0)\ |
1883 res = __INIT_STRING;\ |
1878 res = __INIT_STRING;\ |
1884 L = L < IN.len ? L : IN.len;\ |
1879 L = L < (TYPENAME)IN.len ? L : (TYPENAME)IN.len;\ |
1885 memcpy(&res.body, &IN.body[IN.len - L], L);\ |
1880 memcpy(&res.body, &IN.body[(TYPENAME)IN.len - L], L);\ |
1886 res.len = L;\ |
1881 res.len = L;\ |
1887 return res;\ |
1882 return res;\ |
1888 } |
1883 } |
1889 __ANY_INT(__right) |
1884 __ANY_INT(__right) |
1890 |
1885 |
1896 #define __mid(TYPENAME) \ |
1891 #define __mid(TYPENAME) \ |
1897 static inline STRING MID__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L, TYPENAME P){\ |
1892 static inline STRING MID__STRING__STRING__##TYPENAME##__##TYPENAME(EN_ENO_PARAMS, STRING IN, TYPENAME L, TYPENAME P){\ |
1898 STRING res;\ |
1893 STRING res;\ |
1899 TEST_EN_COND(STRING, L < 0 || P < 0)\ |
1894 TEST_EN_COND(STRING, L < 0 || P < 0)\ |
1900 res = __INIT_STRING;\ |
1895 res = __INIT_STRING;\ |
1901 if(P <= IN.len){\ |
1896 if(P <= (TYPENAME)IN.len){\ |
1902 P -= 1; /* now can be used as [index]*/\ |
1897 P -= 1; /* now can be used as [index]*/\ |
1903 L = L + P <= IN.len ? L : IN.len - P;\ |
1898 L = L + P <= (TYPENAME)IN.len ? L : (TYPENAME)IN.len - P;\ |
1904 memcpy(&res.body, &IN.body[P] , L);\ |
1899 memcpy(&res.body, &IN.body[P] , L);\ |
1905 res.len = L;\ |
1900 res.len = L;\ |
1906 }\ |
1901 }\ |
1907 return res;\ |
1902 return res;\ |
1908 } |
1903 } |
1909 __ANY_INT(__mid) |
1904 __ANY_INT(__mid) |
1910 |
1905 |