33 lines
692 B
C++
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)
|