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)