diff options
author | 2023-05-07 10:44:11 +0530 | |
---|---|---|
committer | 2023-05-07 10:44:11 +0530 | |
commit | 97a91843ffac0bb3aa42540c6e5d3ddea75af489 (patch) | |
tree | 7a26514bef692fd1162f091ff490d456308334a0 /include/mem.h | |
parent | Updated Readme to include build instructions (diff) | |
download | cart-main.tar cart-main.tar.gz cart-main.tar.bz2 cart-main.tar.lz cart-main.tar.xz cart-main.tar.zst cart-main.zip |
Added Basic Error codes, Tests and de-inliningmain
Error codes needs to be ingrated with the alloc module
Tests now have great coverage in the mem module (>75%).
Signed-off-by: Marc Pervaz Boocha <mboocha@sudomsg.xyz>
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
modified: include/alloc.h
new file: include/err.h
modified: include/mem.h
modified: include/meson.build
modified: readme.md
modified: src/alloc/free.c
modified: src/alloc/malloc.c
new file: src/err/errstr.c
new file: src/err/meson.build
new file: src/err/set_err.c
modified: src/mem/memccpy.c
modified: src/mem/memchr.c
modified: src/mem/memcmp.c
modified: src/mem/memcpy.c
modified: src/mem/memlen.c
modified: src/mem/memmem.c
modified: src/mem/memmove.c
modified: src/mem/memrchr.c
modified: src/mem/memrev.c
modified: src/mem/memset.c
modified: src/mem/memswap.c
modified: src/mem/memzero.c
modified: src/meson.build
new file: test/alloc/memdup.c
modified: test/alloc/meson.build
new file: test/mem/memccpy_nullnull.c
new file: test/mem/memchr.c
new file: test/mem/memchr_notfound.c
new file: test/mem/memcmp_diff.c
new file: test/mem/memcmp_prefix.c
new file: test/mem/memcmp_same.c
new file: test/mem/memcmp_samenull.c
new file: test/mem/memcmp_sing.c
new file: test/mem/memcpy_null_prefix.c
new file: test/mem/memcpy_null_same.c
new file: test/mem/memcpy_nullnull.c
new file: test/mem/memcpy_prefix.c
new file: test/mem/memcpy_same.c
new file: test/mem/memlen.c
new file: test/mem/memlen_overflow.c
new file: test/mem/memmove_backward.c
new file: test/mem/memmove_null_backward.c
new file: test/mem/memmove_null_overlap.c
new file: test/mem/memmove_null_prefix.c
new file: test/mem/memmove_null_same.c
new file: test/mem/memmove_null_sing.c
new file: test/mem/memmove_nullnull.c
new file: test/mem/memmove_overlap.c
new file: test/mem/memmove_prefix.c
new file: test/mem/memmove_same.c
new file: test/mem/memmove_sing.c
new file: test/mem/memrchr.c
new file: test/mem/memrchr_notfound.c
new file: test/mem/memrev.c
new file: test/mem/memset_null.c
new file: test/mem/memset_nullnull.c
new file: test/mem/memswap.c
new file: test/mem/memswap_null.c
new file: test/mem/memswap_same.c
new file: test/mem/memzero_null.c
new file: test/mem/memzero_nullnull.c
modified: test/mem/meson.build
modified: test/meson.build
Diffstat (limited to '')
-rw-r--r-- | include/mem.h | 171 |
1 files changed, 21 insertions, 150 deletions
diff --git a/include/mem.h b/include/mem.h index b18822c..4136c76 100644 --- a/include/mem.h +++ b/include/mem.h @@ -7,159 +7,30 @@ #define CALT_MEM_H #include <stddef.h> -inline void *calt_memset(void *restrict dest, unsigned char value, size_t count) { - unsigned char *p = dest; - while (count-- > 0) { - *p++ = value; - } - - return dest; -} - -inline void *calt_memset_null(void *dest, unsigned char value, size_t count) { - return dest ? calt_memset(dest, value, count) : NULL; -} - -inline void *calt_memzero(void *dest, size_t count) { - return calt_memset(dest, '\0', count); -} - -inline void *calt_memzero_null(void *dest, size_t count) { - return dest ? calt_memzero(dest, count) : NULL; -} - -inline void *calt_memcpy(void *restrict dest, const void *restrict src, - size_t count) { - unsigned char *d = dest; - unsigned char const *s = src; - - while (count-- > 0) { - *d++ = *s++; - } - - return dest; -} - - -inline void *calt_memcpy_null(void *restrict dest, void const *restrict src, - size_t count) { - return dest ? calt_memcpy(dest, src, count) : NULL; -} +extern void *calt_memset(void *dest, unsigned char value, size_t count); +extern void *calt_memset_null(void *dest, unsigned char value, size_t count); +extern void *calt_memzero(void *restrict dest, size_t count); +extern void *calt_memzero_null(void *restrict dest, size_t count); +extern void *calt_memcpy(void *restrict dest, void const *restrict src, + size_t count); +extern void *calt_memcpy_null(void *restrict dest, void const *restrict src, + size_t count); extern void *calt_memccpy(void *restrict dest, void const *restrict src, unsigned char value, size_t count); -inline void *calt_memccpy_null(void *restrict dest, void const *restrict src, - unsigned char value, size_t count) { - return dest ? calt_memccpy(dest, src, value, count) : NULL; -} - -inline void *calt_memmove(void *dest, void const *src, size_t count) { - unsigned char *d = dest; - unsigned char const *s = src; - - if (d > s) { - d += count; - s += count; - while (count-- > 0) { - *--d = *--s; - } - } else if (d < s) { - calt_memcpy(dest, src, count); - } - - return dest; -} - -inline void *calt_memmove_null(void *dest, void const *src, size_t count) { - return dest ? calt_memmove(dest, src, count) : NULL; -} - -inline void *calt_memchr(void const *ptr, unsigned char value, size_t count) { - unsigned char const *p = ptr; - - while (count-- > 0) { - if (*p == value) { - return (void *)p; - } - p++; - } - - return NULL; -} - -inline void *calt_memrchr(void const *ptr, unsigned char value, size_t count) { - unsigned char const *p = ptr; - p = p + count; - - while (count > 0) { - if (*(--p) == value) { - return (void *)p; - } - } - - return NULL; -} - -inline int calt_memcmp(const void *ptr1, const void *ptr2, size_t count) { - const unsigned char *p1 = ptr1; - const unsigned char *p2 = ptr2; - - while (count-- > 0) { - if (*p1 != *p2) { - return (*p1 < *p2) ? -1 : 1; - } - p1++; - p2++; - } - - return 0; -} - -inline void calt_memswap(void *restrict ptr1, void *restrict ptr2, size_t size) { - unsigned char *p1 = ptr1; - unsigned char *p2 = ptr2; - while (size-- > 0) { - unsigned char temp = *p1; - *p1++ = *p2; - *p2++ = temp; - } -} - -inline size_t calt_memlen(void const* ptr, unsigned char value, size_t size) { - unsigned char const *p = ptr; - size_t len = 0; - - while (size-- > 0 && *p != value) { - p++; - len++; - } - - return len; -} - +extern void *calt_memccpy_null(void *restrict dest, void const *restrict src, + unsigned char value, size_t count); +extern void *calt_memmove(void *dest, void const *src, size_t count); +extern void *calt_memmove_null(void *dest, void const *src, size_t count); +extern void *calt_memchr(void const *ptr, unsigned char value, size_t count); +extern void *calt_memrchr(void const *ptr, unsigned char value, size_t count); +extern void *calt_memrchr(void const *ptr, unsigned char value, size_t count); +extern int calt_memcmp(void const *ptr1, void const *ptr2, size_t count); +extern void calt_memswap(void *restrict ptr1, void *restrict ptr2, size_t size); +extern size_t calt_memlen(void const *ptr, unsigned char value, size_t count); extern size_t calt_memhash(void const *ptr, size_t count); - -inline void *calt_memmem(void const *haystack, size_t haystacklen, - void const *needle, size_t needlelen) { - unsigned char const *p = haystack; - unsigned char const *end = p + haystacklen - needlelen; - while (p <= end) { - if (calt_memcmp(p, needle, needlelen) == 0) { - return (void *)p; - } - p++; - } - return NULL; -} - -inline void calt_memrev(void *ptr, size_t size) { - unsigned char *p1 = ptr; - unsigned char *p2 = p1 + size - 1; - while (p1 < p2) { - unsigned char temp = *p1; - *p1++ = *p2; - *p2-- = temp; - } -} +extern void *calt_memmem(void const *haystack, size_t haystacklen, + void const *needle, size_t needlelen); +extern void *calt_memrev(void *ptr, size_t size); #endif |