#pragma once #if !defined(BAD_APPLE_OS_MEMORY_HPP_INCLUDED) #define BAD_APPLE_OS_MEMORY_HPP_INCLUDED #include 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 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)