#pragma once #if !defined(MIJIN_UTIL_ALIGN_HPP_INCLUDED) #define MIJIN_UTIL_ALIGN_HPP_INCLUDED 1 #include #include #include "../internal/common.hpp" namespace mijin { template constexpr T alignUp(T value, T alignTo) MIJIN_NOEXCEPT { if (value % alignTo != 0) { return value + alignTo - (value % alignTo); } return value; } template T* alignUp(T* pointer, std::uintptr_t alignTo) MIJIN_NOEXCEPT { return std::bit_cast(alignUp(std::bit_cast(pointer), alignTo)); } #define MIJIN_STRIDEOF(T) mijin::alignUp(sizeof(T), alignof(T)) } // namespace mijin #endif // !defined(MIJIN_UTIL_ALIGN_HPP_INCLUDED)