mijin2/source/mijin/util/align.hpp

33 lines
692 B
C++

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