Allow 0 as alignment value.

This commit is contained in:
Бранимир Караџић
2023-11-11 07:42:44 -08:00
parent a9ebe59e14
commit d8c3672bce
2 changed files with 11 additions and 4 deletions

View File

@@ -708,7 +708,7 @@ namespace bx
template<typename Ty>
inline BX_CONSTEXPR_FUNC bool isAligned(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
const Ty mask = Ty(max(1, _align) - 1);
return 0 == (_a & mask);
}
@@ -727,9 +727,9 @@ namespace bx
}
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align)
inline BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
const Ty mask = Ty(max(1, _align) - 1);
return Ty(_a & ~mask);
}
@@ -752,7 +752,7 @@ namespace bx
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty alignUp(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
const Ty mask = Ty(max(1, _align) - 1);
return Ty( (_a + mask) & ~mask);
}

View File

@@ -141,6 +141,13 @@ TEST_CASE("align", "[uint32_t]")
REQUIRE( bx::isAligned(64, 8) );
REQUIRE(!bx::isAligned(63, 8) );
for (int32_t ii = 0; ii < 1024; ++ii)
{
REQUIRE(bx::isAligned(ii, 0) );
REQUIRE(ii == bx::alignUp(ii, 0) );
REQUIRE(ii == bx::alignDown(ii, 0) );
}
REQUIRE( 0 == bx::alignUp( 0, 16) );
REQUIRE( 16 == bx::alignUp( 1, 16) );
REQUIRE( 16 == bx::alignUp( 15, 16) );