[libcxx-commits] [libcxx] b263a71 - [libc++] Refactor vector constructors to eliminate code duplication (#113193)

via libcxx-commits libcxx-commits at lists.llvm.org
Tue Oct 22 09:21:34 PDT 2024


Author: Peng Liu
Date: 2024-10-22T12:21:31-04:00
New Revision: b263a71c2b1b14be53102f0a2ce4df131937f478

URL: https://github.com/llvm/llvm-project/commit/b263a71c2b1b14be53102f0a2ce4df131937f478
DIFF: https://github.com/llvm/llvm-project/commit/b263a71c2b1b14be53102f0a2ce4df131937f478.diff

LOG: [libc++] Refactor vector constructors to eliminate code duplication (#113193)

This PR refactors the std::vector's initializer_list constructors to
reduce code duplication. The constructors now call `__init_with_size`
directly, reducing code duplication and improving readability and
maintainability.

Added: 
    

Modified: 
    libcxx/include/vector

Removed: 
    


################################################################################
diff  --git a/libcxx/include/vector b/libcxx/include/vector
index dc31f31838264c..bfbf1ea1cfc9f0 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -1292,24 +1292,14 @@ vector<_Tp, _Allocator>::vector(vector&& __x, const __type_identity_t<allocator_
 template <class _Tp, class _Allocator>
 _LIBCPP_CONSTEXPR_SINCE_CXX20 inline _LIBCPP_HIDE_FROM_ABI
 vector<_Tp, _Allocator>::vector(initializer_list<value_type> __il) {
-  auto __guard = std::__make_exception_guard(__destroy_vector(*this));
-  if (__il.size() > 0) {
-    __vallocate(__il.size());
-    __construct_at_end(__il.begin(), __il.end(), __il.size());
-  }
-  __guard.__complete();
+  __init_with_size(__il.begin(), __il.end(), __il.size());
 }
 
 template <class _Tp, class _Allocator>
 _LIBCPP_CONSTEXPR_SINCE_CXX20 inline _LIBCPP_HIDE_FROM_ABI
 vector<_Tp, _Allocator>::vector(initializer_list<value_type> __il, const allocator_type& __a)
     : __alloc_(__a) {
-  auto __guard = std::__make_exception_guard(__destroy_vector(*this));
-  if (__il.size() > 0) {
-    __vallocate(__il.size());
-    __construct_at_end(__il.begin(), __il.end(), __il.size());
-  }
-  __guard.__complete();
+  __init_with_size(__il.begin(), __il.end(), __il.size());
 }
 
 #endif // _LIBCPP_CXX03_LANG


        


More information about the libcxx-commits mailing list