[libcxx-commits] [libcxx] [libc++] Simplify vector's emplace_back and __construct_at_end functions (PR #120521)
Peng Liu via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Dec 19 04:04:06 PST 2024
https://github.com/winner245 updated https://github.com/llvm/llvm-project/pull/120521
>From 317e9e401b75efba145883a0a77fc0c43098a375 Mon Sep 17 00:00:00 2001
From: Peng Liu <winner245 at hotmail.com>
Date: Wed, 18 Dec 2024 23:45:10 -0500
Subject: [PATCH] Simplfy emplace_back and __construct_at_end for vector
---
libcxx/include/__vector/vector.h | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/libcxx/include/__vector/vector.h b/libcxx/include/__vector/vector.h
index 6ba7ba7bcf724b..7ad209be02d4aa 100644
--- a/libcxx/include/__vector/vector.h
+++ b/libcxx/include/__vector/vector.h
@@ -879,9 +879,8 @@ vector<_Tp, _Allocator>::__recommend(size_type __new_size) const {
template <class _Tp, class _Allocator>
_LIBCPP_CONSTEXPR_SINCE_CXX20 void vector<_Tp, _Allocator>::__construct_at_end(size_type __n) {
_ConstructTransaction __tx(*this, __n);
- const_pointer __new_end = __tx.__new_end_;
- for (pointer __pos = __tx.__pos_; __pos != __new_end; __tx.__pos_ = ++__pos) {
- __alloc_traits::construct(this->__alloc_, std::__to_address(__pos));
+ for (; __tx.__pos_ != __tx.__new_end_; ++__tx.__pos_) {
+ __alloc_traits::construct(this->__alloc_, std::__to_address(__tx.__pos_));
}
}
@@ -895,9 +894,8 @@ template <class _Tp, class _Allocator>
_LIBCPP_CONSTEXPR_SINCE_CXX20 inline void
vector<_Tp, _Allocator>::__construct_at_end(size_type __n, const_reference __x) {
_ConstructTransaction __tx(*this, __n);
- const_pointer __new_end = __tx.__new_end_;
- for (pointer __pos = __tx.__pos_; __pos != __new_end; __tx.__pos_ = ++__pos) {
- __alloc_traits::construct(this->__alloc_, std::__to_address(__pos), __x);
+ for (; __tx.__pos_ != __tx.__new_end_; ++__tx.__pos_) {
+ __alloc_traits::construct(this->__alloc_, std::__to_address(__tx.__pos_), __x);
}
}
@@ -1101,16 +1099,12 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 inline
void
#endif
vector<_Tp, _Allocator>::emplace_back(_Args&&... __args) {
- pointer __end = this->__end_;
- if (__end < this->__cap_) {
+ if (this->__end_ < this->__cap_)
__construct_one_at_end(std::forward<_Args>(__args)...);
- ++__end;
- } else {
- __end = __emplace_back_slow_path(std::forward<_Args>(__args)...);
- }
- this->__end_ = __end;
+ else
+ (void)__emplace_back_slow_path(std::forward<_Args>(__args)...);
#if _LIBCPP_STD_VER >= 17
- return *(__end - 1);
+ return *(this->__end_ - 1);
#endif
}
More information about the libcxx-commits
mailing list