| 133 | #endif // _LIBCPP_HAS_THREADS |
| 134 | |
| 135 | void* align(size_t alignment, size_t size, void*& ptr, size_t& space) { |
| 136 | void* r = nullptr; |
| 137 | if (size <= space) { |
| 138 | char* p1 = static_cast<char*>(ptr); |
| 139 | char* p2 = reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(p1 + (alignment - 1)) & -alignment); |
| 140 | size_t d = static_cast<size_t>(p2 - p1); |
| 141 | if (d <= space - size) { |
| 142 | r = p2; |
| 143 | ptr = r; |
| 144 | space -= d; |
| 145 | } |
| 146 | } |
| 147 | return r; |
| 148 | } |
| 149 | |
| 150 | _LIBCPP_END_NAMESPACE_STD |