This commit is contained in:
Бранимир Караџић
2022-09-22 20:32:24 -07:00
parent b7874721b8
commit 9158648261
3 changed files with 38 additions and 40 deletions

View File

@@ -95,9 +95,6 @@ namespace bx
) override;
};
/// Check if pointer is aligned. _align must be power of two.
bool isAligned(const void* _ptr, size_t _align);
/// Aligns pointer to nearest next aligned address. _align must be power of two.
void* alignPtr(
void* _ptr

View File

@@ -687,66 +687,67 @@ namespace bx
return result;
}
template <typename Ty>
inline bool isAligned(Ty _a, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC bool isAligned(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
return 0 == (_a & mask);
}
template <typename Ty>
inline bool isAligned(const Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC bool isAligned(Ty* _ptr, int32_t _align)
{
union { const void* ptr; uintptr_t addr; } un = { _ptr };
return isAligned(un.addr, _align);
}
template <typename Ty>
inline bool isAligned(Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC bool isAligned(const Ty* _ptr, int32_t _align)
{
return isAligned( (const void*)_ptr, _align);
union { const void* ptr; uintptr_t addr; } un = { _ptr };
return isAligned(un.addr, _align);
}
template <typename Ty>
inline Ty alignDown(Ty _a, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
return Ty(_a & ~mask);
}
template <typename Ty>
inline Ty* alignDown(Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty* alignDown(Ty* _ptr, int32_t _align)
{
union { Ty* ptr; uintptr_t addr; } un = { _ptr };
un.addr = alignDown(un.addr, _align);
return un.ptr;
}
template <typename Ty>
inline const Ty* alignDown(const Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC const Ty* alignDown(const Ty* _ptr, int32_t _align)
{
union { const Ty* ptr; uintptr_t addr; } un = { _ptr };
un.addr = alignDown(un.addr, _align);
return un.ptr;
}
template <typename Ty>
inline Ty alignUp(Ty _a, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty alignUp(Ty _a, int32_t _align)
{
const Ty mask = Ty(_align - 1);
return Ty( (_a + mask) & ~mask);
}
template <typename Ty>
inline Ty* alignUp(Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC Ty* alignUp(Ty* _ptr, int32_t _align)
{
union { Ty* ptr; uintptr_t addr; } un = { _ptr };
un.addr = alignUp(un.addr, _align);
return un.ptr;
}
template <typename Ty>
inline const Ty* alignUp(const Ty* _ptr, int32_t _align)
template<typename Ty>
inline BX_CONSTEXPR_FUNC const Ty* alignUp(const Ty* _ptr, int32_t _align)
{
union { const Ty* ptr; uintptr_t addr; } un = { _ptr };
un.addr = alignUp(un.addr, _align);

View File

@@ -252,40 +252,40 @@ namespace bx
BX_CONSTEXPR_FUNC uint32_t strideAlign(uint32_t _offset, uint32_t _stride);
///
template <typename Ty>
bool isAligned(Ty _a, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC bool isAligned(Ty _a, int32_t _align);
///
template <typename Ty>
bool isAligned(void* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC bool isAligned(Ty* _ptr, int32_t _align);
///
template <typename Ty>
bool isAligned(const void* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC bool isAligned(const Ty* _ptr, int32_t _align);
///
template <typename Ty>
Ty alignDown(Ty _a, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align);
///
template <typename Ty>
Ty* alignDown(Ty* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC Ty* alignDown(Ty* _ptr, int32_t _align);
///
template <typename Ty>
const Ty* alignDown(const Ty* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC const Ty* alignDown(const Ty* _ptr, int32_t _align);
///
template <typename Ty>
Ty alignUp(Ty _a, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC Ty alignUp(Ty _a, int32_t _align);
///
template <typename Ty>
Ty* alignUp(Ty* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC Ty* alignUp(Ty* _ptr, int32_t _align);
///
template <typename Ty>
const Ty* alignUp(const Ty* _ptr, int32_t _align);
template<typename Ty>
BX_CONSTEXPR_FUNC const Ty* alignUp(const Ty* _ptr, int32_t _align);
/// Convert float to half-float.
///