| 54 | void* New(size_t size) { return ::operator new(size); } |
| 55 | |
| 56 | void* AlignedNew(size_t size, std::align_val_t alignment) { |
| 57 | ABSL_DCHECK(absl::has_single_bit(static_cast<size_t>(alignment))); |
| 58 | #ifdef CEL_INTERNAL_HAVE_ALIGNED_NEW |
| 59 | return ::operator new(size, alignment); |
| 60 | #else |
| 61 | if (static_cast<size_t>(alignment) <= kDefaultNewAlignment) { |
| 62 | return New(size); |
| 63 | } |
| 64 | #if defined(_MSC_VER) |
| 65 | void* ptr = _aligned_malloc(size, static_cast<size_t>(alignment)); |
| 66 | if (ABSL_PREDICT_FALSE(size != 0 && ptr == nullptr)) { |
| 67 | ThrowStdBadAlloc(); |
| 68 | } |
| 69 | return ptr; |
| 70 | #elif defined(__APPLE__) |
| 71 | void* ptr; |
| 72 | if (ABSL_PREDICT_FALSE( |
| 73 | posix_memalign(&ptr, static_cast<size_t>(alignment), size) != 0)) { |
| 74 | ThrowStdBadAlloc(); |
| 75 | } |
| 76 | return ptr; |
| 77 | #else |
| 78 | void* ptr = std::aligned_alloc(static_cast<size_t>(alignment), size); |
| 79 | if (ABSL_PREDICT_FALSE(size != 0 && ptr == nullptr)) { |
| 80 | ThrowStdBadAlloc(); |
| 81 | } |
| 82 | return ptr; |
| 83 | #endif |
| 84 | #endif |
| 85 | } |
| 86 | |
| 87 | std::pair<void*, size_t> SizeReturningNew(size_t size) { |
| 88 | return std::pair{::operator new(size), size}; |