diff options
Diffstat (limited to 'Objects/uniops.h')
-rw-r--r-- | Objects/uniops.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/Objects/uniops.h b/Objects/uniops.h new file mode 100644 index 0000000..06a0b4e --- /dev/null +++ b/Objects/uniops.h @@ -0,0 +1,91 @@ + +size_t +UNIOP(strlen)(const UNIOP_t *u) +{ + int res = 0; + while(*u++) + res++; + return res; +} + +UNIOP_t* +UNIOP(strcpy)(UNIOP_t *s1, const UNIOP_t *s2) +{ + UNIOP_t *u = s1; + while ((*u++ = *s2++)); + return s1; +} + +UNIOP_t* +UNIOP(strncpy)(UNIOP_t *s1, const UNIOP_t *s2, size_t n) +{ + UNIOP_t *u = s1; + while ((*u++ = *s2++)) + if (n-- == 0) + break; + return s1; +} + +UNIOP_t* +UNIOP(strcat)(UNIOP_t *s1, const UNIOP_t *s2) +{ + UNIOP_t *u1 = s1; + u1 += UNIOP(strlen(u1)); + UNIOP(strcpy(u1, s2)); + return s1; +} + +int +UNIOP(strcmp)(const UNIOP_t *s1, const UNIOP_t *s2) +{ + while (*s1 && *s2 && *s1 == *s2) + s1++, s2++; + if (*s1 && *s2) + return (*s1 < *s2) ? -1 : +1; + if (*s1) + return 1; + if (*s2) + return -1; + return 0; +} + +int +UNIOP(strncmp)(const UNIOP_t *s1, const UNIOP_t *s2, size_t n) +{ + register UNIOP_t u1, u2; + for (; n != 0; n--) { + u1 = *s1; + u2 = *s2; + if (u1 != u2) + return (u1 < u2) ? -1 : +1; + if (u1 == '\0') + return 0; + s1++; + s2++; + } + return 0; +} + +UNIOP_t* +UNIOP(strchr)(const UNIOP_t *s, UNIOP_t c) +{ + const UNIOP_t *p; + for (p = s; *p; p++) + if (*p == c) + return (UNIOP_t*)p; + return NULL; +} + +UNIOP_t* +UNIOP(strrchr)(const UNIOP_t *s, UNIOP_t c) +{ + const UNIOP_t *p; + p = s + UNIOP(strlen)(s); + while (p != s) { + p--; + if (*p == c) + return (UNIOP_t*)p; + } + return NULL; +} + |