44 lines
1.6 KiB
C++
44 lines
1.6 KiB
C++
#ifndef ALIGNSIZE_H
|
||
#define ALIGNSIZE_H
|
||
|
||
#include "UserSuffix.h" // 用到Aligin的地方通常也会用到K/M/G尾缀
|
||
|
||
/// 将size向上对齐到algin,不足的大小补齐。algin必须是2^n
|
||
/// T、T2可以为uint16_t, uint32_t, int,int64_t,size_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, int,int64_t,size_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, int,int64_t,size_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, int,int64_t,size_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, int,int64_t,size_t,不能为负数
|
||
template <typename T, typename T2>
|
||
inline bool isAlign(const T &size, const T2 align) {
|
||
return (size & T(align - 1))==0;
|
||
}
|
||
|
||
#endif // ALIGNSIZE_H/
|