#pragma once template constexpr T is_aligned(T value, T align_base) { return (value % align_base == 0); } template constexpr T align_down(T value, T align_base) { return value - (value % align_base); } template constexpr T align_up(T value, T align_base) { if (is_aligned(value, align_base)) return value; return align_down(value, align_base) + align_base; } template constexpr T get_blocks_from_size(T value, T block_size) { return (value + (block_size - 1)) / block_size; }