Files
GdCpp12/include/AlignSize.h

44 lines
1.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef ALIGNSIZE_H
#define ALIGNSIZE_H
#include "UserSuffix.h" // 用到Aligin的地方通常也会用到K/M/G尾缀
/// 将size向上对齐到algin不足的大小补齐。algin必须是2^n
/// T、T2可以为uint16_t, uint32_t intint64_tsize_t不能为负数
template <typename T, typename T2>
inline void AlignUp(T &size, const T2 align){
T odd = size & T(align-1);
size += (odd) ? (align-odd) : 0;
}
/// 返回size向上对齐到algin的数值不足的大小补齐。algin必须是2^n
/// T、T2可以为uint16_t, uint32_t intint64_tsize_t不能为负数
template <typename T, typename T2>
inline T getAlignUp(const T size, const T2 align) {
T odd = size & T(align - 1);
return size + ((odd) ? (align - odd) : 0);
}
/// 将size向下对齐到algin边界超出的余数去掉。algin必须是2^n
/// T、T2可以为uint16_t, uint32_t intint64_tsize_t不能为负数
template <typename T, typename T2>
inline void AlignDown(T &size, const T2 align) {
size -= size & T(align - 1);
}
/// 返回size向下对齐到algin的数值不足的大小补齐。algin必须是2^n
/// T、T2可以为uint16_t, uint32_t intint64_tsize_t不能为负数
template <typename T, typename T2>
inline T getAlignDown(const T size, const T2 align) {
return size - (size & T(align - 1));
}
/// 判断size是否对齐algin。algin必须是2^n
/// T、T2可以为uint16_t, uint32_t intint64_tsize_t不能为负数
template <typename T, typename T2>
inline bool isAlign(const T &size, const T2 align) {
return (size & T(align - 1))==0;
}
#endif // ALIGNSIZE_H/