Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: include/string

Issue 2574553002: [counting-allocator] macOS buildtools/third_party/libc++/trunk/ changes.
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/set ('k') | include/unordered_map » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/string
diff --git a/include/string b/include/string
index ee5db1aab63b28e0598ea762e34b482ebf66d40a..aed64ac34aad9dfa32e1bf1b5cb1a894064c41b0 100644
--- a/include/string
+++ b/include/string
@@ -1323,6 +1323,7 @@ private:
struct __rep
{
+ __rep(): __s() {}
union
{
__long __l;
@@ -1758,9 +1759,21 @@ private:
_LIBCPP_INLINE_VISIBILITY
size_type __get_long_size() const _NOEXCEPT
{return __r_.first().__l.__size_;}
+
_LIBCPP_INLINE_VISIBILITY
void __set_size(size_type __s) _NOEXCEPT
- {if (__is_long()) __set_long_size(__s); else __set_short_size(__s);}
+ {
+ if (__is_long())
+ {
+ __count_destroyed(__alloc(), __get_long_size());
+ __count_constructed(__alloc(), __s);
+ __set_long_size(__s);
+ }
+ else
+ {
+ __set_short_size(__s);
+ }
+ }
_LIBCPP_INLINE_VISIBILITY
void __set_long_cap(size_type __s) _NOEXCEPT
@@ -1770,6 +1783,18 @@ private:
{return __r_.first().__l.__cap_ & size_type(~__long_mask);}
_LIBCPP_INLINE_VISIBILITY
+ void __set_long_cap_size(size_type __c, size_type __s) _NOEXCEPT
+ {
+ if (__is_long())
+ {
+ __count_destroyed(__alloc(), __get_long_size());
+ }
+ __set_long_cap(__c);
+ __set_long_size(__s);
+ __count_constructed(__alloc(), __s);
+ }
+
+ _LIBCPP_INLINE_VISIBILITY
void __set_long_pointer(pointer __p) _NOEXCEPT
{__r_.first().__l.__data_ = __p;}
_LIBCPP_INLINE_VISIBILITY
@@ -1988,8 +2013,7 @@ basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_ty
size_type __cap = __recommend(__reserve);
__p = __alloc_traits::allocate(__alloc(), __cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
- __set_long_size(__sz);
+ __set_long_cap_size(__cap+1, __sz);
}
traits_type::copy(_VSTD::__to_raw_pointer(__p), __s, __sz);
traits_type::assign(__p[__sz], value_type());
@@ -2012,8 +2036,7 @@ basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_ty
size_type __cap = __recommend(__sz);
__p = __alloc_traits::allocate(__alloc(), __cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
- __set_long_size(__sz);
+ __set_long_cap_size(__cap+1, __sz);
}
traits_type::copy(_VSTD::__to_raw_pointer(__p), __s, __sz);
traits_type::assign(__p[__sz], value_type());
@@ -2149,8 +2172,7 @@ basic_string<_CharT, _Traits, _Allocator>::__init(size_type __n, value_type __c)
size_type __cap = __recommend(__n);
__p = __alloc_traits::allocate(__alloc(), __cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
- __set_long_size(__n);
+ __set_long_cap_size(__cap+1, __n);
}
traits_type::assign(_VSTD::__to_raw_pointer(__p), __n, __c);
traits_type::assign(__p[__n], value_type());
@@ -2212,6 +2234,7 @@ basic_string<_CharT, _Traits, _Allocator>::__init(_InputIterator __first, _Input
}
catch (...)
{
+ __set_size(0);
if (__is_long())
__alloc_traits::deallocate(__alloc(), __get_long_pointer(), __get_long_cap());
throw;
@@ -2242,8 +2265,7 @@ basic_string<_CharT, _Traits, _Allocator>::__init(_ForwardIterator __first, _For
size_type __cap = __recommend(__sz);
__p = __alloc_traits::allocate(__alloc(), __cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
- __set_long_size(__sz);
+ __set_long_cap_size(__cap+1, __sz);
}
for (; __first != __last; ++__first, (void) ++__p)
traits_type::assign(*__p, *__first);
@@ -2305,6 +2327,7 @@ basic_string<_CharT, _Traits, _Allocator>::~basic_string()
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__erase_c(this);
#endif
+ __set_size(0);
if (__is_long())
__alloc_traits::deallocate(__alloc(), __get_long_pointer(), __get_long_cap());
}
@@ -2336,9 +2359,8 @@ basic_string<_CharT, _Traits, _Allocator>::__grow_by_and_replace
if (__old_cap+1 != __min_cap)
__alloc_traits::deallocate(__alloc(), __old_p, __old_cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
__old_sz = __n_copy + __n_add + __sec_cp_sz;
- __set_long_size(__old_sz);
+ __set_long_cap_size(__cap+1, __old_sz);
traits_type::assign(__p[__old_sz], value_type());
}
@@ -2367,7 +2389,7 @@ basic_string<_CharT, _Traits, _Allocator>::__grow_by(size_type __old_cap, size_t
if (__old_cap+1 != __min_cap)
__alloc_traits::deallocate(__alloc(), __old_p, __old_cap+1);
__set_long_pointer(__p);
- __set_long_cap(__cap+1);
+ __set_long_cap_size(__cap+1, __old_sz);
}
// assign
@@ -2421,13 +2443,12 @@ basic_string<_CharT, _Traits, _Allocator>::operator=(value_type __c)
if (__is_long())
{
__p = __get_long_pointer();
- __set_long_size(1);
}
else
{
__p = __get_short_pointer();
- __set_short_size(1);
}
+ __set_size(1);
traits_type::assign(*__p, __c);
traits_type::assign(*++__p, value_type());
__invalidate_iterators_past(1);
@@ -2628,13 +2649,12 @@ basic_string<_CharT, _Traits, _Allocator>::push_back(value_type __c)
if (__is_short)
{
__p = __get_short_pointer() + __sz;
- __set_short_size(__sz+1);
}
else
{
__p = __get_long_pointer() + __sz;
- __set_long_size(__sz+1);
}
+ __set_size(__sz+1);
traits_type::assign(*__p, __c);
traits_type::assign(*++__p, value_type());
}
@@ -3152,15 +3172,14 @@ basic_string<_CharT, _Traits, _Allocator>::pop_back()
if (__is_long())
{
__sz = __get_long_size() - 1;
- __set_long_size(__sz);
traits_type::assign(*(__get_long_pointer() + __sz), value_type());
}
else
{
__sz = __get_short_size() - 1;
- __set_short_size(__sz);
traits_type::assign(*(__get_short_pointer() + __sz), value_type());
}
+ __set_size(__sz);
__invalidate_iterators_past(__sz);
}
@@ -3173,13 +3192,12 @@ basic_string<_CharT, _Traits, _Allocator>::clear() _NOEXCEPT
if (__is_long())
{
traits_type::assign(*__get_long_pointer(), value_type());
- __set_long_size(0);
}
else
{
traits_type::assign(*__get_short_pointer(), value_type());
- __set_short_size(0);
}
+ __set_size(0);
}
template <class _CharT, class _Traits, class _Allocator>
@@ -3190,13 +3208,12 @@ basic_string<_CharT, _Traits, _Allocator>::__erase_to_end(size_type __pos)
if (__is_long())
{
traits_type::assign(*(__get_long_pointer() + __pos), value_type());
- __set_long_size(__pos);
}
else
{
traits_type::assign(*(__get_short_pointer() + __pos), value_type());
- __set_short_size(__pos);
}
+ __set_size(__pos);
__invalidate_iterators_past(__pos);
}
@@ -3271,14 +3288,14 @@ basic_string<_CharT, _Traits, _Allocator>::reserve(size_type __res_arg)
__was_long = __is_long();
__p = __get_pointer();
}
+ __set_size(0);
traits_type::copy(_VSTD::__to_raw_pointer(__new_data),
- _VSTD::__to_raw_pointer(__p), size()+1);
+ _VSTD::__to_raw_pointer(__p), __sz+1);
if (__was_long)
__alloc_traits::deallocate(__alloc(), __p, __cap+1);
if (__now_long)
{
- __set_long_cap(__res_arg+1);
- __set_long_size(__sz);
+ __set_long_cap_size(__res_arg+1, __sz);
__set_long_pointer(__new_data);
}
else
@@ -4288,7 +4305,7 @@ inline namespace literals
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_string<char>)
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_string<wchar_t>)
-_LIBCPP_EXTERN_TEMPLATE(string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&))
+_LIBCPP_EXTERN_TEMPLATE(string operator+<char, char_traits<char>, counting_allocator<char, allocation_group::string> >(char const*, string const&))
_LIBCPP_END_NAMESPACE_STD
« no previous file with comments | « include/set ('k') | include/unordered_map » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698