111 lines
2.2 KiB
C++
111 lines
2.2 KiB
C++
/***
|
|
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
|
|
|
|
#if defined(AURORA_RUNTIME_MEMCMP_) && AURORA_RUNTIME_MEMCMP_ == 1
|
|
|
|
#define AuMemcmp AURORA_RUNTIME_MEMCMP
|
|
|
|
#else
|
|
|
|
static auline int AuMemcmp(const void *dest, const void *src, size_t n)
|
|
{
|
|
return AURORA_RUNTIME_MEMCMP(dest, src, n);
|
|
}
|
|
|
|
#endif
|
|
|
|
#if !defined(AURORA_RUNTIME_MEMSET)
|
|
#define AURORA_RUNTIME_MEMSET std::memset
|
|
#endif
|
|
|
|
#if defined(AURORA_RUNTIME_MEMSET_) && AURORA_RUNTIME_MEMSET_ == 1
|
|
|
|
#define AuMemset AURORA_RUNTIME_MEMSET
|
|
|
|
#else
|
|
|
|
static auline void *AuMemset(void *dest, AuUInt8 c, size_t n)
|
|
{
|
|
return AURORA_RUNTIME_MEMSET(dest, c, n);
|
|
}
|
|
|
|
#endif
|
|
|
|
#if !defined(AURORA_RUNTIME_MEMCPY)
|
|
#define AURORA_RUNTIME_MEMCPY std::memcpy
|
|
#endif
|
|
|
|
#if defined(AURORA_RUNTIME_MEMCPY_) && AURORA_RUNTIME_MEMCPY_ == 1
|
|
|
|
#define AuMemcpy AURORA_RUNTIME_MEMCPY
|
|
|
|
#else
|
|
|
|
static auline void *AuMemcpy(void *dest, const void *src, size_t n)
|
|
{
|
|
return AURORA_RUNTIME_MEMCPY(dest, src, n);
|
|
}
|
|
|
|
#endif
|
|
|
|
#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
|
|
} |