24static inline uintptr_t GetAddrNum(
const void *p) {
25 return reinterpret_cast<uintptr_t
>(p);
28static inline void *GetAddrPtr(uintptr_t n) {
29 return reinterpret_cast<void *
>(n);
32static inline void *AddOffset(
const void *p,
size_t offset) {
33 return GetAddrPtr(GetAddrNum(p) + offset);
36static inline void *SubOffset(
const void *p,
size_t offset) {
37 return GetAddrPtr(GetAddrNum(p) - offset);
40static inline uintptr_t RoundUp(uintptr_t value, uintptr_t alignment) {
41 return (value + alignment - 1) & ~(alignment - 1);
44static inline void *RoundUp(
void *ptr, uintptr_t alignment) {
45 return GetAddrPtr(RoundUp(GetAddrNum(ptr), alignment));
48static inline uintptr_t RoundDown(uintptr_t value, uintptr_t alignment) {
49 return value & ~(alignment - 1);
52static inline void *RoundDown(
void *ptr, uintptr_t alignment) {
53 return GetAddrPtr(RoundDown(GetAddrNum(ptr), alignment));