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)
 |