mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-25 06:21:00 +00:00
Use allocator_traits if available
This commit is contained in:
parent
66b25ef0d0
commit
cdfcee27fb
@ -222,7 +222,16 @@ inline dummy_int isinf(...) { return dummy_int(); }
|
|||||||
inline dummy_int _finite(...) { return dummy_int(); }
|
inline dummy_int _finite(...) { return dummy_int(); }
|
||||||
inline dummy_int isnan(...) { return dummy_int(); }
|
inline dummy_int isnan(...) { return dummy_int(); }
|
||||||
inline dummy_int _isnan(...) { return dummy_int(); }
|
inline dummy_int _isnan(...) { return dummy_int(); }
|
||||||
|
|
||||||
|
template <typename Allocator>
|
||||||
|
typename Allocator::value_type *allocate(Allocator& alloc, std::size_t n) {
|
||||||
|
#if __cplusplus >= 201103L || FMT_MSC_VER >= 1700
|
||||||
|
return std::allocator_traits<Allocator>::allocate(alloc, n);
|
||||||
|
#else
|
||||||
|
return this->allocate(n);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
} // namespace internal
|
||||||
} // namespace fmt
|
} // namespace fmt
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
@ -442,7 +451,7 @@ void basic_memory_buffer<T, SIZE, Allocator>::grow(std::size_t size) {
|
|||||||
if (size > new_capacity)
|
if (size > new_capacity)
|
||||||
new_capacity = size;
|
new_capacity = size;
|
||||||
T *old_data = this->data();
|
T *old_data = this->data();
|
||||||
T *new_data = this->allocate(new_capacity);
|
T *new_data = internal::allocate<Allocator>(*this, new_capacity);
|
||||||
// The following code doesn't throw, so the raw pointer above doesn't leak.
|
// The following code doesn't throw, so the raw pointer above doesn't leak.
|
||||||
std::uninitialized_copy(old_data, old_data + this->size(),
|
std::uninitialized_copy(old_data, old_data + this->size(),
|
||||||
internal::make_ptr(new_data, new_capacity));
|
internal::make_ptr(new_data, new_capacity));
|
||||||
|
@ -78,7 +78,9 @@ class AllocatorRef {
|
|||||||
|
|
||||||
Allocator *get() const { return alloc_; }
|
Allocator *get() const { return alloc_; }
|
||||||
|
|
||||||
value_type* allocate(std::size_t n) { return alloc_->allocate(n); }
|
value_type* allocate(std::size_t n) {
|
||||||
|
return fmt::internal::allocate(*alloc_, n);
|
||||||
|
}
|
||||||
void deallocate(value_type* p, std::size_t n) { alloc_->deallocate(p, n); }
|
void deallocate(value_type* p, std::size_t n) { alloc_->deallocate(p, n); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user