45 lines
942 B
Plaintext
45 lines
942 B
Plaintext
|
|
#pragma once
|
|
|
|
#if !defined(BAD_APPLE_OS_MEMORY_HPP_INCLUDED)
|
|
#define BAD_APPLE_OS_MEMORY_HPP_INCLUDED
|
|
|
|
#include <cstddef>
|
|
|
|
namespace std
|
|
{
|
|
constexpr void* align(std::size_t alignment, std::size_t size, void*& ptr, std::size_t& space) noexcept
|
|
{
|
|
if (space < size) {
|
|
return nullptr;
|
|
}
|
|
std::size_t addr = __builtin_bit_cast(std::size_t, ptr);
|
|
if (addr % alignment != 0)
|
|
{
|
|
std::size_t offset = alignment + (addr % alignment);
|
|
if (space < size + offset)
|
|
{
|
|
return nullptr;
|
|
}
|
|
addr += offset;
|
|
space -= offset;
|
|
ptr = __builtin_bit_cast(void*, addr);
|
|
}
|
|
return ptr;
|
|
}
|
|
|
|
#if defined(BASTL_EXTENSIONS)
|
|
template<typename T>
|
|
constexpr T alignUp(T value, T alignTo) noexcept
|
|
{
|
|
if (value % alignTo != 0)
|
|
{
|
|
return value + alignTo - (value % alignTo);
|
|
}
|
|
return value;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#endif // !defined(BAD_APPLE_OS_MEMORY_HPP_INCLUDED)
|