/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: auMemoryUtils.hpp Date: 2022-2-1 File: AuroraUtils.hpp File: auROXTLUtils.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once #if !defined(AURORA_RUNTIME_MEMCMP) #define AURORA_RUNTIME_MEMCMP std::memcmp #endif static auline int AuMemcmp(const void *dest, const void *src, size_t n) { return AURORA_RUNTIME_MEMCMP(dest, src, n); } #if !defined(AURORA_RUNTIME_MEMSET) #define AURORA_RUNTIME_MEMSET std::memset #endif static auline void *AuMemset(void *dest, AuUInt8 c, size_t n) { return AURORA_RUNTIME_MEMSET(dest, c, n); } #if !defined(AURORA_RUNTIME_MEMCPY) #define AURORA_RUNTIME_MEMCPY std::memcpy #endif static auline void *AuMemcpy(void *dest, const void *src, size_t n) { return AURORA_RUNTIME_MEMCPY(dest, src, n); } #if !defined(AURORA_RUNTIME_MEMMOVE) #define AURORA_RUNTIME_MEMMOVE std::memmove #endif static auline void *AuMemmove(void *dest, const void *src, size_t n) { return AURORA_RUNTIME_MEMMOVE(dest, src, n); } static auline void *AuMemmem(const void *haystack, size_t haystackLen, const void *const needle, const size_t needleLen) { #if defined(AURORA_IS_LINUX_DERIVED) return ::memmem(haystack, haystackLen, needle, needleLen); #else if (!haystack) { return {}; } if (!haystackLen) { return {}; } if (!needle) { return {}; } if (!needleLen) { return {}; } for (const char *h = (const char *)haystack; haystackLen >= needleLen; ++h, --haystackLen) { if (!AuMemcmp(h, needle, needleLen)) { return (void *)h; } } return {}; #endif }