#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 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 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 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 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 inline bool isAlign(const T &size, const T2 align) { return (size & T(align - 1))==0; } #endif // ALIGNSIZE_H/