32#pragma GCC system_header
34#if __cplusplus >= 201103L
43namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
45_GLIBCXX_BEGIN_NAMESPACE_VERSION
55 template<
typename _CharT,
typename _Traits,
typename _Alloc,
56 template <
typename,
typename,
typename>
class _Base>
58 :
private _Base<_CharT, _Traits, _Alloc>
60 typedef _Base<_CharT, _Traits, _Alloc> __vstring_base;
61 typedef typename __vstring_base::_CharT_alloc_type _CharT_alloc_type;
66 typedef _Traits traits_type;
67 typedef typename _Traits::char_type value_type;
68 typedef _Alloc allocator_type;
69 typedef typename _CharT_alloc_type::size_type size_type;
70 typedef typename _CharT_alloc_type::difference_type difference_type;
71 typedef value_type& reference;
72 typedef const value_type& const_reference;
73 typedef typename _CharT_alloc_traits::pointer pointer;
74 typedef typename _CharT_alloc_traits::const_pointer const_pointer;
75 typedef __gnu_cxx::__normal_iterator<pointer, __versa_string> iterator;
76 typedef __gnu_cxx::__normal_iterator<const_pointer, __versa_string>
83 static const size_type
npos =
static_cast<size_type
>(-1);
87 _M_check(size_type __pos,
const char* __s)
const
89 if (__pos > this->
size())
90 std::__throw_out_of_range_fmt(__N(
"%s: __pos (which is %zu) > "
91 "this->size() (which is %zu)"),
92 __s, __pos, this->
size());
97 _M_check_length(size_type __n1, size_type __n2,
const char* __s)
const
100 std::__throw_length_error(__N(__s));
105 _M_limit(size_type __pos, size_type __off)
const _GLIBCXX_NOEXCEPT
107 const bool __testoff = __off < this->
size() - __pos;
108 return __testoff ? __off : this->
size() - __pos;
113 _M_disjunct(
const _CharT* __s)
const _GLIBCXX_NOEXCEPT
117 + this->
size(), __s));
123 _M_ibegin() const _GLIBCXX_NOEXCEPT
124 {
return iterator(this->_M_data()); }
127 _M_iend() const _GLIBCXX_NOEXCEPT
128 {
return iterator(this->_M_data() + this->_M_length()); }
140 : __vstring_base(__a) { }
148 : __vstring_base(__str) { }
150#if __cplusplus >= 201103L
168 const _Alloc& __a = _Alloc())
169 : __vstring_base(__l.
begin(), __l.
end(), __a) { }
179 size_type __n =
npos)
180 : __vstring_base(__str._M_data()
181 + __str._M_check(__pos,
182 "__versa_string::__versa_string"),
183 __str._M_data() + __str._M_limit(__pos, __n)
184 + __pos, _Alloc()) { }
194 size_type __n,
const _Alloc& __a)
195 : __vstring_base(__str._M_data()
196 + __str._M_check(__pos,
197 "__versa_string::__versa_string"),
198 __str._M_data() + __str._M_limit(__pos, __n)
211 const _Alloc& __a = _Alloc())
212 : __vstring_base(__s, __s + __n, __a) { }
220 : __vstring_base(__s, __s ? __s + traits_type::
length(__s) :
230 : __vstring_base(__n, __c, __a) { }
238#if __cplusplus >= 201103L
239 template<
class _InputIterator,
240 typename = std::_RequireInputIter<_InputIterator>>
242 template<
class _InputIterator>
245 const _Alloc& __a = _Alloc())
246 : __vstring_base(__beg, __end, __a) { }
259 {
return this->
assign(__str); }
261#if __cplusplus >= 201103L
284 this->
assign(__l.begin(), __l.end());
295 {
return this->
assign(__s); }
320 return iterator(this->_M_data());
329 {
return const_iterator(this->_M_data()); }
339 return iterator(this->_M_data() + this->
size());
347 end() const _GLIBCXX_NOEXCEPT
348 {
return const_iterator(this->_M_data() + this->
size()); }
364 const_reverse_iterator
382 const_reverse_iterator
386#if __cplusplus >= 201103L
393 {
return const_iterator(this->_M_data()); }
401 {
return const_iterator(this->_M_data() + this->
size()); }
408 const_reverse_iterator
417 const_reverse_iterator
428 {
return this->_M_length(); }
434 {
return this->_M_length(); }
439 {
return this->_M_max_size(); }
452 resize(size_type __n, _CharT __c);
466 { this->
resize(__n, _CharT()); }
468#if __cplusplus >= 201103L
489 {
return this->_M_capacity(); }
510 { this->_M_reserve(__res_arg); }
517 { this->_M_clear(); }
523 _GLIBCXX_NODISCARD
bool
525 {
return this->
size() == 0; }
541 __glibcxx_assert(__pos <= this->
size());
542 return this->_M_data()[__pos];
560 __glibcxx_assert(__pos <= this->
size());
562 _GLIBCXX_DEBUG_PEDASSERT(__cplusplus >= 201103L
563 || __pos < this->
size());
565 return this->_M_data()[__pos];
579 at(size_type __n)
const
581 if (__n >= this->
size())
582 std::__throw_out_of_range_fmt(__N(
"__versa_string::at: __n "
583 "(which is %zu) >= this->size() "
586 return this->_M_data()[__n];
603 if (__n >= this->
size())
604 std::__throw_out_of_range_fmt(__N(
"__versa_string::at: __n "
605 "(which is %zu) >= this->size() "
609 return this->_M_data()[__n];
612#if __cplusplus >= 201103L
654 {
return this->
append(__str); }
663 {
return this->
append(__s); }
677#if __cplusplus >= 201103L
685 {
return this->
append(__l.begin(), __l.end()); }
695 {
return _M_append(__str._M_data(), __str.
size()); }
712 {
return _M_append(__str._M_data()
713 + __str._M_check(__pos,
"__versa_string::append"),
714 __str._M_limit(__pos, __n)); }
725 __glibcxx_requires_string_len(__s, __n);
726 _M_check_length(size_type(0), __n,
"__versa_string::append");
727 return _M_append(__s, __n);
738 __glibcxx_requires_string(__s);
739 const size_type __n = traits_type::length(__s);
740 _M_check_length(size_type(0), __n,
"__versa_string::append");
741 return _M_append(__s, __n);
754 {
return _M_replace_aux(this->
size(), size_type(0), __n, __c); }
756#if __cplusplus >= 201103L
764 {
return this->
append(__l.begin(), __l.end()); }
775#if __cplusplus >= 201103L
776 template<
class _InputIterator,
777 typename = std::_RequireInputIter<_InputIterator>>
779 template<
class _InputIterator>
782 append(_InputIterator __first, _InputIterator __last)
783 {
return this->
replace(_M_iend(), _M_iend(), __first, __last); }
792 const size_type __size = this->
size();
793 if (__size + 1 > this->
capacity() || this->_M_is_shared())
794 this->_M_mutate(__size, size_type(0), 0, size_type(1));
795 traits_type::assign(this->_M_data()[__size], __c);
796 this->_M_set_length(__size + 1);
807 this->_M_assign(__str);
811#if __cplusplus >= 201103L
843 {
return _M_replace(size_type(0), this->
size(), __str._M_data()
844 + __str._M_check(__pos,
"__versa_string::assign"),
845 __str._M_limit(__pos, __n)); }
861 __glibcxx_requires_string_len(__s, __n);
862 return _M_replace(size_type(0), this->
size(), __s, __n);
877 __glibcxx_requires_string(__s);
878 return _M_replace(size_type(0), this->
size(), __s,
879 traits_type::length(__s));
893 {
return _M_replace_aux(size_type(0), this->
size(), __n, __c); }
904#if __cplusplus >= 201103L
905 template<
class _InputIterator,
906 typename = std::_RequireInputIter<_InputIterator>>
908 template<
class _InputIterator>
911 assign(_InputIterator __first, _InputIterator __last)
912 {
return this->
replace(_M_ibegin(), _M_iend(), __first, __last); }
914#if __cplusplus >= 201103L
922 {
return this->
assign(__l.begin(), __l.end()); }
925#if __cplusplus >= 201103L
942 insert(const_iterator __p, size_type __n, _CharT __c)
944 _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend());
945 const size_type __pos = __p - _M_ibegin();
946 this->
replace(__p, __p, __n, __c);
947 return iterator(this->_M_data() + __pos);
964 insert(iterator __p, size_type __n, _CharT __c)
965 { this->
replace(__p, __p, __n, __c); }
968#if __cplusplus >= 201103L
983 template<
class _InputIterator,
984 typename = std::_RequireInputIter<_InputIterator>>
986 insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
988 _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend());
989 const size_type __pos = __p - _M_ibegin();
990 this->
replace(__p, __p, __beg, __end);
991 return iterator(this->_M_data() + __pos);
1006 template<
class _InputIterator>
1008 insert(iterator __p, _InputIterator __beg, _InputIterator __end)
1009 { this->
replace(__p, __p, __beg, __end); }
1012#if __cplusplus >= 201103L
1023 {
return this->
insert(__p, __l.begin(), __l.end()); }
1040 {
return this->
replace(__pos1, size_type(0),
1041 __str._M_data(), __str.
size()); }
1063 size_type __pos2, size_type __n)
1064 {
return this->
replace(__pos1, size_type(0), __str._M_data()
1065 + __str._M_check(__pos2,
"__versa_string::insert"),
1066 __str._M_limit(__pos2, __n)); }
1085 insert(size_type __pos,
const _CharT* __s, size_type __n)
1086 {
return this->
replace(__pos, size_type(0), __s, __n); }
1106 __glibcxx_requires_string(__s);
1107 return this->
replace(__pos, size_type(0), __s,
1108 traits_type::length(__s));
1128 insert(size_type __pos, size_type __n, _CharT __c)
1129 {
return _M_replace_aux(_M_check(__pos,
"__versa_string::insert"),
1130 size_type(0), __n, __c); }
1146#if __cplusplus >= 201103L
1149 insert(iterator __p, _CharT __c)
1152 _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend());
1153 const size_type __pos = __p - _M_ibegin();
1154 _M_replace_aux(__pos, size_type(0), size_type(1), __c);
1155 this->_M_set_leaked();
1156 return iterator(this->_M_data() + __pos);
1177 this->_M_erase(_M_check(__pos,
"__versa_string::erase"),
1178 _M_limit(__pos, __n));
1191#if __cplusplus >= 201103L
1194 erase(iterator __position)
1197 _GLIBCXX_DEBUG_PEDASSERT(__position >= _M_ibegin()
1198 && __position < _M_iend());
1199 const size_type __pos = __position - _M_ibegin();
1200 this->_M_erase(__pos, size_type(1));
1201 this->_M_set_leaked();
1202 return iterator(this->_M_data() + __pos);
1216#if __cplusplus >= 201103L
1217 erase(const_iterator __first, const_iterator __last)
1219 erase(iterator __first, iterator __last)
1222 _GLIBCXX_DEBUG_PEDASSERT(__first >= _M_ibegin() && __first <= __last
1223 && __last <= _M_iend());
1224 const size_type __pos = __first - _M_ibegin();
1225 this->_M_erase(__pos, __last - __first);
1226 this->_M_set_leaked();
1227 return iterator(this->_M_data() + __pos);
1230#if __cplusplus >= 201103L
1238 { this->_M_erase(
size()-1, 1); }
1260 {
return this->
replace(__pos, __n, __str._M_data(), __str.
size()); }
1283 size_type __pos2, size_type __n2)
1285 return this->
replace(__pos1, __n1, __str._M_data()
1286 + __str._M_check(__pos2,
1287 "__versa_string::replace"),
1288 __str._M_limit(__pos2, __n2));
1310 replace(size_type __pos, size_type __n1,
const _CharT* __s,
1313 __glibcxx_requires_string_len(__s, __n2);
1314 return _M_replace(_M_check(__pos,
"__versa_string::replace"),
1315 _M_limit(__pos, __n1), __s, __n2);
1334 replace(size_type __pos, size_type __n1,
const _CharT* __s)
1336 __glibcxx_requires_string(__s);
1337 return this->
replace(__pos, __n1, __s, traits_type::length(__s));
1358 replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
1359 {
return _M_replace_aux(_M_check(__pos,
"__versa_string::replace"),
1360 _M_limit(__pos, __n1), __n2, __c); }
1376#if __cplusplus >= 201103L
1382 {
return this->
replace(__i1, __i2, __str._M_data(), __str.
size()); }
1399#if __cplusplus >= 201103L
1401 const _CharT* __s, size_type __n)
1403 replace(iterator __i1, iterator __i2,
const _CharT* __s, size_type __n)
1406 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1407 && __i2 <= _M_iend());
1408 return this->
replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n);
1425#if __cplusplus >= 201103L
1426 replace(const_iterator __i1, const_iterator __i2,
const _CharT* __s)
1428 replace(iterator __i1, iterator __i2,
const _CharT* __s)
1431 __glibcxx_requires_string(__s);
1432 return this->
replace(__i1, __i2, __s, traits_type::length(__s));
1450#if __cplusplus >= 201103L
1451 replace(const_iterator __i1, const_iterator __i2, size_type __n,
1454 replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)
1457 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1458 && __i2 <= _M_iend());
1459 return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c);
1476#if __cplusplus >= 201103L
1477 template<
class _InputIterator,
1478 typename = std::_RequireInputIter<_InputIterator>>
1481 _InputIterator __k1, _InputIterator __k2)
1483 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1484 && __i2 <= _M_iend());
1485 __glibcxx_requires_valid_range(__k1, __k2);
1486 return this->_M_replace_dispatch(__i1, __i2, __k1, __k2,
1487 std::__false_type());
1490 template<
class _InputIterator>
1492 replace(iterator __i1, iterator __i2,
1493 _InputIterator __k1, _InputIterator __k2)
1495 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1496 && __i2 <= _M_iend());
1497 __glibcxx_requires_valid_range(__k1, __k2);
1498 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
1499 return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
1506#if __cplusplus >= 201103L
1507 replace(const_iterator __i1, const_iterator __i2,
1508 _CharT* __k1, _CharT* __k2)
1510 replace(iterator __i1, iterator __i2,
1511 _CharT* __k1, _CharT* __k2)
1514 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1515 && __i2 <= _M_iend());
1516 __glibcxx_requires_valid_range(__k1, __k2);
1517 return this->
replace(__i1 - _M_ibegin(), __i2 - __i1,
1522#if __cplusplus >= 201103L
1523 replace(const_iterator __i1, const_iterator __i2,
1524 const _CharT* __k1,
const _CharT* __k2)
1526 replace(iterator __i1, iterator __i2,
1527 const _CharT* __k1,
const _CharT* __k2)
1530 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1531 && __i2 <= _M_iend());
1532 __glibcxx_requires_valid_range(__k1, __k2);
1533 return this->
replace(__i1 - _M_ibegin(), __i2 - __i1,
1538#if __cplusplus >= 201103L
1539 replace(const_iterator __i1, const_iterator __i2,
1540 iterator __k1, iterator __k2)
1542 replace(iterator __i1, iterator __i2,
1543 iterator __k1, iterator __k2)
1546 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1547 && __i2 <= _M_iend());
1548 __glibcxx_requires_valid_range(__k1, __k2);
1549 return this->
replace(__i1 - _M_ibegin(), __i2 - __i1,
1550 __k1.base(), __k2 - __k1);
1554#if __cplusplus >= 201103L
1555 replace(const_iterator __i1, const_iterator __i2,
1556 const_iterator __k1, const_iterator __k2)
1558 replace(iterator __i1, iterator __i2,
1559 const_iterator __k1, const_iterator __k2)
1562 _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2
1563 && __i2 <= _M_iend());
1564 __glibcxx_requires_valid_range(__k1, __k2);
1565 return this->
replace(__i1 - _M_ibegin(), __i2 - __i1,
1566 __k1.base(), __k2 - __k1);
1569#if __cplusplus >= 201103L
1586 {
return this->
replace(__i1, __i2, __l.begin(), __l.end()); }
1590 template<
class _Integer>
1592 _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
1593 _Integer __n, _Integer __val, std::__true_type)
1594 {
return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); }
1596 template<
class _InputIterator>
1598 _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
1599 _InputIterator __k1, _InputIterator __k2,
1603 _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
1607 _M_replace(size_type __pos, size_type __len1,
const _CharT* __s,
1608 const size_type __len2);
1611 _M_append(
const _CharT* __s, size_type __n);
1628 copy(_CharT* __s, size_type __n, size_type __pos = 0)
const;
1639 { this->_M_swap(__s); }
1650 {
return this->_M_data(); }
1660 {
return this->_M_data(); }
1667 {
return allocator_type(this->_M_get_allocator()); }
1682 find(
const _CharT* __s, size_type __pos, size_type __n)
const;
1697 {
return this->
find(__str.
data(), __pos, __str.
size()); }
1710 find(
const _CharT* __s, size_type __pos = 0)
const
1712 __glibcxx_requires_string(__s);
1713 return this->
find(__s, __pos, traits_type::length(__s));
1727 find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;
1742 {
return this->
rfind(__str.data(), __pos, __str.size()); }
1757 rfind(
const _CharT* __s, size_type __pos, size_type __n)
const;
1772 __glibcxx_requires_string(__s);
1773 return this->
rfind(__s, __pos, traits_type::length(__s));
1787 rfind(_CharT __c, size_type __pos =
npos)
const _GLIBCXX_NOEXCEPT;
1817 find_first_of(
const _CharT* __s, size_type __pos, size_type __n)
const;
1832 __glibcxx_requires_string(__s);
1833 return this->
find_first_of(__s, __pos, traits_type::length(__s));
1850 {
return this->
find(__c, __pos); }
1881 find_last_of(
const _CharT* __s, size_type __pos, size_type __n)
const;
1896 __glibcxx_requires_string(__s);
1897 return this->
find_last_of(__s, __pos, traits_type::length(__s));
1914 {
return this->
rfind(__c, __pos); }
1945 size_type __n)
const;
1960 __glibcxx_requires_string(__s);
1991 size_type __pos =
npos) const _GLIBCXX_NOEXCEPT
2008 size_type __n)
const;
2023 __glibcxx_requires_string(__s);
2056 return __versa_string(*
this, _M_check(__pos,
"__versa_string::substr"),
2077 if (this->_M_compare(__str))
2080 const size_type __size = this->
size();
2081 const size_type __osize = __str.
size();
2082 const size_type __len =
std::min(__size, __osize);
2084 int __r = traits_type::compare(this->_M_data(), __str.
data(), __len);
2086 __r = this->_S_compare(__size, __osize);
2110 compare(size_type __pos, size_type __n,
2137 compare(size_type __pos1, size_type __n1,
const __versa_string& __str,
2138 size_type __pos2, size_type __n2)
const;
2156 compare(
const _CharT* __s)
const;
2180 compare(size_type __pos, size_type __n1,
const _CharT* __s)
const;
2207 compare(size_type __pos, size_type __n1,
const _CharT* __s,
2208 size_type __n2)
const;
2218 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2219 template <
typename,
typename,
typename>
class _Base>
2220 __versa_string<_CharT, _Traits, _Alloc, _Base>
2221 operator+(
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
2222 const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs);
2230 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2231 template <
typename,
typename,
typename>
class _Base>
2232 __versa_string<_CharT, _Traits, _Alloc, _Base>
2233 operator+(
const _CharT* __lhs,
2234 const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs);
2242 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2243 template <
typename,
typename,
typename>
class _Base>
2244 __versa_string<_CharT, _Traits, _Alloc, _Base>
2245 operator+(_CharT __lhs,
2246 const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs);
2254 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2255 template <
typename,
typename,
typename>
class _Base>
2256 __versa_string<_CharT, _Traits, _Alloc, _Base>
2257 operator+(
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
2258 const _CharT* __rhs);
2266 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2267 template <
typename,
typename,
typename>
class _Base>
2268 __versa_string<_CharT, _Traits, _Alloc, _Base>
2269 operator+(
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
2272#if __cplusplus >= 201103L
2273 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2274 template <
typename,
typename,
typename>
class _Base>
2275 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2276 operator+(__versa_string<_CharT, _Traits, _Alloc, _Base>&& __lhs,
2277 const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs)
2278 {
return std::move(__lhs.append(__rhs)); }
2280 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2281 template <
typename,
typename,
typename>
class _Base>
2282 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2283 operator+(
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
2284 __versa_string<_CharT, _Traits, _Alloc, _Base>&& __rhs)
2285 {
return std::move(__rhs.insert(0, __lhs)); }
2287 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2288 template <
typename,
typename,
typename>
class _Base>
2289 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2290 operator+(__versa_string<_CharT, _Traits, _Alloc, _Base>&& __lhs,
2291 __versa_string<_CharT, _Traits, _Alloc, _Base>&& __rhs)
2293 const auto __size = __lhs.size() + __rhs.size();
2294 const bool __cond = (__size > __lhs.capacity()
2295 && __size <= __rhs.capacity());
2296 return __cond ?
std::move(__rhs.insert(0, __lhs))
2297 :
std::move(__lhs.append(__rhs));
2300 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2301 template <
typename,
typename,
typename>
class _Base>
2302 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2304 __versa_string<_CharT, _Traits, _Alloc, _Base>&& __rhs)
2305 {
return std::move(__rhs.insert(0, __lhs)); }
2307 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2308 template <
typename,
typename,
typename>
class _Base>
2309 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2311 __versa_string<_CharT, _Traits, _Alloc, _Base>&& __rhs)
2312 {
return std::move(__rhs.insert(0, 1, __lhs)); }
2314 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2315 template <
typename,
typename,
typename>
class _Base>
2316 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2317 operator+(__versa_string<_CharT, _Traits, _Alloc, _Base>&& __lhs,
2318 const _CharT* __rhs)
2319 {
return std::move(__lhs.append(__rhs)); }
2321 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2322 template <
typename,
typename,
typename>
class _Base>
2323 inline __versa_string<_CharT, _Traits, _Alloc, _Base>
2324 operator+(__versa_string<_CharT, _Traits, _Alloc, _Base>&& __lhs,
2326 {
return std::move(__lhs.append(1, __rhs)); }
2336 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2337 template <
typename,
typename,
typename>
class _Base>
2341 {
return __lhs.
compare(__rhs) == 0; }
2343 template<
typename _CharT,
2344 template <
typename,
typename,
typename>
class _Base>
2345 inline typename __enable_if<std::__is_char<_CharT>::__value,
bool>::__type
2350 {
return (__lhs.size() == __rhs.size()
2360 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2361 template <
typename,
typename,
typename>
class _Base>
2363 operator==(
const _CharT* __lhs,
2365 {
return __rhs.
compare(__lhs) == 0; }
2373 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2374 template <
typename,
typename,
typename>
class _Base>
2377 const _CharT* __rhs)
2378 {
return __lhs.
compare(__rhs) == 0; }
2387 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2388 template <
typename,
typename,
typename>
class _Base>
2392 {
return !(__lhs == __rhs); }
2400 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2401 template <
typename,
typename,
typename>
class _Base>
2403 operator!=(
const _CharT* __lhs,
2405 {
return !(__lhs == __rhs); }
2413 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2414 template <
typename,
typename,
typename>
class _Base>
2417 const _CharT* __rhs)
2418 {
return !(__lhs == __rhs); }
2427 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2428 template <
typename,
typename,
typename>
class _Base>
2432 {
return __lhs.
compare(__rhs) < 0; }
2440 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2441 template <
typename,
typename,
typename>
class _Base>
2444 const _CharT* __rhs)
2445 {
return __lhs.
compare(__rhs) < 0; }
2453 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2454 template <
typename,
typename,
typename>
class _Base>
2456 operator<(
const _CharT* __lhs,
2458 {
return __rhs.
compare(__lhs) > 0; }
2467 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2468 template <
typename,
typename,
typename>
class _Base>
2472 {
return __lhs.
compare(__rhs) > 0; }
2480 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2481 template <
typename,
typename,
typename>
class _Base>
2484 const _CharT* __rhs)
2485 {
return __lhs.
compare(__rhs) > 0; }
2493 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2494 template <
typename,
typename,
typename>
class _Base>
2496 operator>(
const _CharT* __lhs,
2498 {
return __rhs.
compare(__lhs) < 0; }
2507 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2508 template <
typename,
typename,
typename>
class _Base>
2512 {
return __lhs.
compare(__rhs) <= 0; }
2520 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2521 template <
typename,
typename,
typename>
class _Base>
2524 const _CharT* __rhs)
2525 {
return __lhs.
compare(__rhs) <= 0; }
2533 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2534 template <
typename,
typename,
typename>
class _Base>
2536 operator<=(
const _CharT* __lhs,
2538 {
return __rhs.
compare(__lhs) >= 0; }
2547 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2548 template <
typename,
typename,
typename>
class _Base>
2552 {
return __lhs.
compare(__rhs) >= 0; }
2560 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2561 template <
typename,
typename,
typename>
class _Base>
2564 const _CharT* __rhs)
2565 {
return __lhs.
compare(__rhs) >= 0; }
2573 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2574 template <
typename,
typename,
typename>
class _Base>
2576 operator>=(
const _CharT* __lhs,
2578 {
return __rhs.
compare(__lhs) <= 0; }
2587 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2588 template <
typename,
typename,
typename>
class _Base>
2592 { __lhs.
swap(__rhs); }
2594_GLIBCXX_END_NAMESPACE_VERSION
2597namespace std _GLIBCXX_VISIBILITY(default)
2599_GLIBCXX_BEGIN_NAMESPACE_VERSION
2613 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2614 template <
typename,
typename,
typename>
class _Base>
2615 basic_istream<_CharT, _Traits>&
2618 _Alloc, _Base>& __str);
2629 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2630 template <
typename,
typename,
typename>
class _Base>
2638 return __ostream_insert(__os, __str.
data(), __str.
size());
2655 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2656 template <
typename,
typename,
typename>
class _Base>
2657 basic_istream<_CharT, _Traits>&
2658 getline(basic_istream<_CharT, _Traits>& __is,
2675 template<
typename _CharT,
typename _Traits,
typename _Alloc,
2676 template <
typename,
typename,
typename>
class _Base>
2677 inline basic_istream<_CharT, _Traits>&
2682_GLIBCXX_END_NAMESPACE_VERSION
2685#if __cplusplus >= 201103L
2689namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
2691_GLIBCXX_BEGIN_NAMESPACE_VERSION
2693#if _GLIBCXX_USE_C99_STDLIB
2696 stoi(
const __vstring& __str, std::size_t* __idx = 0,
int __base = 10)
2697 {
return __gnu_cxx::__stoa<long, int>(&std::strtol,
"stoi", __str.c_str(),
2701 stol(
const __vstring& __str, std::size_t* __idx = 0,
int __base = 10)
2702 {
return __gnu_cxx::__stoa(&std::strtol,
"stol", __str.c_str(),
2705 inline unsigned long
2706 stoul(
const __vstring& __str, std::size_t* __idx = 0,
int __base = 10)
2707 {
return __gnu_cxx::__stoa(&std::strtoul,
"stoul", __str.c_str(),
2711 stoll(
const __vstring& __str, std::size_t* __idx = 0,
int __base = 10)
2712 {
return __gnu_cxx::__stoa(&std::strtoll,
"stoll", __str.c_str(),
2715 inline unsigned long long
2716 stoull(
const __vstring& __str, std::size_t* __idx,
int __base = 10)
2717 {
return __gnu_cxx::__stoa(&std::strtoull,
"stoull", __str.c_str(),
2722 stof(
const __vstring& __str, std::size_t* __idx = 0)
2723 {
return __gnu_cxx::__stoa(&std::strtof,
"stof", __str.c_str(), __idx); }
2726 stod(
const __vstring& __str, std::size_t* __idx = 0)
2727 {
return __gnu_cxx::__stoa(&std::strtod,
"stod", __str.c_str(), __idx); }
2730 stold(
const __vstring& __str, std::size_t* __idx = 0)
2731 {
return __gnu_cxx::__stoa(&std::strtold,
"stold", __str.c_str(), __idx); }
2734#if _GLIBCXX_USE_C99_STDIO
2739 to_string(
int __val)
2740 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf, 4 *
sizeof(
int),
2744 to_string(
unsigned __val)
2745 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf,
2746 4 *
sizeof(
unsigned),
2750 to_string(
long __val)
2751 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf,
2756 to_string(
unsigned long __val)
2757 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf,
2758 4 *
sizeof(
unsigned long),
2763 to_string(
long long __val)
2764 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf,
2765 4 *
sizeof(
long long),
2769 to_string(
unsigned long long __val)
2770 {
return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf,
2771 4 *
sizeof(
unsigned long long),
2775 to_string(
float __val)
2777 const int __n = __numeric_traits<float>::__max_exponent10 + 20;
2778 return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf, __n,
2783 to_string(
double __val)
2785 const int __n = __numeric_traits<double>::__max_exponent10 + 20;
2786 return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf, __n,
2791 to_string(
long double __val)
2793 const int __n = __numeric_traits<long double>::__max_exponent10 + 20;
2794 return __gnu_cxx::__to_xstring<__vstring>(&std::vsnprintf, __n,
2799#if defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_C99_WCHAR
2801 stoi(
const __wvstring& __str, std::size_t* __idx = 0,
int __base = 10)
2802 {
return __gnu_cxx::__stoa<long, int>(&std::wcstol,
"stoi", __str.c_str(),
2806 stol(
const __wvstring& __str, std::size_t* __idx = 0,
int __base = 10)
2807 {
return __gnu_cxx::__stoa(&std::wcstol,
"stol", __str.c_str(),
2810 inline unsigned long
2811 stoul(
const __wvstring& __str, std::size_t* __idx = 0,
int __base = 10)
2812 {
return __gnu_cxx::__stoa(&std::wcstoul,
"stoul", __str.c_str(),
2816 stoll(
const __wvstring& __str, std::size_t* __idx = 0,
int __base = 10)
2817 {
return __gnu_cxx::__stoa(&std::wcstoll,
"stoll", __str.c_str(),
2820 inline unsigned long long
2821 stoull(
const __wvstring& __str, std::size_t* __idx = 0,
int __base = 10)
2822 {
return __gnu_cxx::__stoa(&std::wcstoull,
"stoull", __str.c_str(),
2827 stof(
const __wvstring& __str, std::size_t* __idx = 0)
2828 {
return __gnu_cxx::__stoa(&std::wcstof,
"stof", __str.c_str(), __idx); }
2831 stod(
const __wvstring& __str, std::size_t* __idx = 0)
2832 {
return __gnu_cxx::__stoa(&std::wcstod,
"stod", __str.c_str(), __idx); }
2835 stold(
const __wvstring& __str, std::size_t* __idx = 0)
2836 {
return __gnu_cxx::__stoa(&std::wcstold,
"stold", __str.c_str(), __idx); }
2838#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
2841 to_wstring(
int __val)
2842 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2847 to_wstring(
unsigned __val)
2848 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2849 4 *
sizeof(
unsigned),
2853 to_wstring(
long __val)
2854 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2859 to_wstring(
unsigned long __val)
2860 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2861 4 *
sizeof(
unsigned long),
2865 to_wstring(
long long __val)
2866 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2867 4 *
sizeof(
long long),
2871 to_wstring(
unsigned long long __val)
2872 {
return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf,
2873 4 *
sizeof(
unsigned long long),
2877 to_wstring(
float __val)
2879 const int __n = __numeric_traits<float>::__max_exponent10 + 20;
2880 return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf, __n,
2885 to_wstring(
double __val)
2887 const int __n = __numeric_traits<double>::__max_exponent10 + 20;
2888 return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf, __n,
2893 to_wstring(
long double __val)
2895 const int __n = __numeric_traits<long double>::__max_exponent10 + 20;
2896 return __gnu_cxx::__to_xstring<__wvstring>(&std::vswprintf, __n,
2902_GLIBCXX_END_NAMESPACE_VERSION
2907#if __cplusplus >= 201103L
2911namespace std _GLIBCXX_VISIBILITY(default)
2913_GLIBCXX_BEGIN_NAMESPACE_VERSION
2918 :
public __hash_base<size_t, __gnu_cxx::__vstring>
2922 {
return std::_Hash_impl::hash(__s.
data(), __s.
length()); }
2928 :
public __hash_base<size_t, __gnu_cxx::__wvstring>
2932 {
return std::_Hash_impl::hash(__s.
data(),
2933 __s.
length() *
sizeof(
wchar_t)); }
2939 :
public __hash_base<size_t, __gnu_cxx::__u16vstring>
2943 {
return std::_Hash_impl::hash(__s.
data(),
2944 __s.
length() *
sizeof(
char16_t)); }
2950 :
public __hash_base<size_t, __gnu_cxx::__u32vstring>
2954 {
return std::_Hash_impl::hash(__s.
data(),
2955 __s.
length() *
sizeof(
char32_t)); }
2958_GLIBCXX_END_NAMESPACE_VERSION
constexpr complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
ISO C++ entities toplevel namespace is std.
basic_istream< _CharT, _Traits > & getline(basic_istream< _CharT, _Traits > &__is, basic_string< _CharT, _Traits, _Alloc > &__str, _CharT __delim)
Read a line from stream into a string.
std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, bitset< _Nb > &__x)
Global I/O operators for bitsets.
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
Global I/O operators for bitsets.
GNU extensions for public use.
char_type widen(char __c) const
Widens characters.
Template class basic_istream.
Template class basic_ostream.
Primary class template hash.
The standard allocator, as per C++03 [20.4.1].
Basis for explicit traits specializations.
One of the comparison functors.
Uniform interface to C++98 and C++11 allocators.
Template class __versa_string.
__versa_string & assign(const _CharT *__s)
Set value to contents of a C string.
void swap(__versa_string &__s) noexcept
Swap contents with another string.
reverse_iterator rend() noexcept
iterator begin() noexcept
__versa_string & replace(size_type __pos, size_type __n1, const _CharT *__s)
Replace characters with value of a C string.
iterator insert(const_iterator __p, _CharT __c)
Insert one character.
size_type find_last_of(const _CharT *__s, size_type __pos=npos) const
Find last position of a character of C string.
__versa_string & insert(size_type __pos1, const __versa_string &__str)
Insert value of a string.
size_type find_last_of(const __versa_string &__str, size_type __pos=npos) const noexcept
Find last position of a character of string.
__versa_string & replace(size_type __pos, size_type __n1, const _CharT *__s, size_type __n2)
Replace characters with value of a C substring.
size_type find_first_not_of(const __versa_string &__str, size_type __pos=0) const noexcept
Find position of a character not in string.
size_type find(const _CharT *__s, size_type __pos, size_type __n) const
Find position of a C substring.
__versa_string & insert(size_type __pos, size_type __n, _CharT __c)
Insert multiple characters.
const_reference at(size_type __n) const
Provides access to the data contained in the string.
__versa_string & replace(const_iterator __i1, const_iterator __i2, const _CharT *__s)
Replace range of characters with C string.
__versa_string & operator=(_CharT __c)
Set value to string of length 1.
size_type find_first_of(_CharT __c, size_type __pos=0) const noexcept
Find position of a character.
const_reference front() const noexcept
__versa_string & replace(size_type __pos1, size_type __n1, const __versa_string &__str, size_type __pos2, size_type __n2)
Replace characters with value from another string.
__versa_string & operator+=(const _CharT *__s)
Append a C string.
__versa_string & append(std::initializer_list< _CharT > __l)
Append an initializer_list of characters.
__versa_string & append(_InputIterator __first, _InputIterator __last)
Append a range of characters.
__versa_string & operator=(const __versa_string &__str)
Assign the value of str to this string.
size_type find_last_not_of(const __versa_string &__str, size_type __pos=npos) const noexcept
Find last position of a character not in string.
const_iterator cend() const noexcept
__versa_string & operator+=(const __versa_string &__str)
Append a string to this string.
__versa_string & insert(size_type __pos, const _CharT *__s, size_type __n)
Insert a C substring.
size_type find_first_of(const __versa_string &__str, size_type __pos=0) const noexcept
Find position of a character of string.
__versa_string(_InputIterator __beg, _InputIterator __end, const _Alloc &__a=_Alloc())
Construct string as copy of a range.
__versa_string & replace(const_iterator __i1, const_iterator __i2, size_type __n, _CharT __c)
Replace range of characters with multiple characters.
__versa_string & append(const _CharT *__s, size_type __n)
Append a C substring.
__versa_string & append(const __versa_string &__str, size_type __pos, size_type __n)
Append a substring.
__versa_string(const _Alloc &__a=_Alloc()) noexcept
Construct an empty string using allocator a.
__versa_string & append(const __versa_string &__str)
Append a string to this string.
size_type find(const __versa_string &__str, size_type __pos=0) const noexcept
Find position of a string.
const_reverse_iterator rbegin() const noexcept
size_type find_last_not_of(const _CharT *__s, size_type __pos=npos) const
Find last position of a character not in C string.
__versa_string(std::initializer_list< _CharT > __l, const _Alloc &__a=_Alloc())
Construct string from an initializer list.
__versa_string & operator+=(_CharT __c)
Append a character.
void resize(size_type __n, _CharT __c)
Resizes the string to the specified number of characters.
__versa_string & assign(const __versa_string &__str)
Set value to contents of another string.
__versa_string & operator=(const _CharT *__s)
Copy contents of __s into this string.
allocator_type get_allocator() const noexcept
Return copy of allocator used to construct this string.
__versa_string & assign(__versa_string &&__str) noexcept
Set value to contents of another string.
iterator erase(const_iterator __position)
Remove one character.
size_type capacity() const noexcept
__versa_string & assign(const __versa_string &__str, size_type __pos, size_type __n)
Set value to a substring of a string.
__versa_string & operator=(std::initializer_list< _CharT > __l)
Set value to string constructed from initializer list.
iterator insert(const_iterator __p, std::initializer_list< _CharT > __l)
Insert an initializer_list of characters.
__versa_string & replace(const_iterator __i1, const_iterator __i2, const _CharT *__s, size_type __n)
Replace range of characters with C substring.
~__versa_string() noexcept
Destroy the string instance.
static const size_type npos
Value returned by various member functions when they fail.
reference back() noexcept
size_type find_first_not_of(const _CharT *__s, size_type __pos=0) const
Find position of a character not in C string.
reference at(size_type __n)
Provides access to the data contained in the string.
iterator erase(const_iterator __first, const_iterator __last)
Remove a range of characters.
__versa_string(__versa_string &&__str) noexcept
String move constructor.
size_type length() const noexcept
Returns the number of characters in the string, not including any null-termination.
size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
const _CharT * data() const noexcept
Return const pointer to contents.
int compare(const __versa_string &__str) const
Compare to a string.
void shrink_to_fit() noexcept
A non-binding request to reduce capacity() to size().
__versa_string(size_type __n, _CharT __c, const _Alloc &__a=_Alloc())
Construct string as multiple characters.
bool empty() const noexcept
reference operator[](size_type __pos) noexcept
Subscript access to the data contained in the string.
__versa_string(const _CharT *__s, size_type __n, const _Alloc &__a=_Alloc())
Construct string initialized by a character array.
iterator insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
Insert a range of characters.
__versa_string & insert(size_type __pos1, const __versa_string &__str, size_type __pos2, size_type __n)
Insert a substring.
const_reference back() const noexcept
__versa_string & insert(size_type __pos, const _CharT *__s)
Insert a C string.
void resize(size_type __n)
Resizes the string to the specified number of characters.
const_reverse_iterator crbegin() const noexcept
const_iterator begin() const noexcept
const_reverse_iterator rend() const noexcept
const_reference operator[](size_type __pos) const noexcept
Subscript access to the data contained in the string.
__versa_string substr(size_type __pos=0, size_type __n=npos) const
Get a substring.
__versa_string(const _CharT *__s, const _Alloc &__a=_Alloc())
Construct string as copy of a C string.
__versa_string & assign(size_type __n, _CharT __c)
Set value to multiple characters.
__versa_string(const __versa_string &__str, size_type __pos, size_type __n=npos)
Construct string as copy of a substring.
__versa_string(const __versa_string &__str, size_type __pos, size_type __n, const _Alloc &__a)
Construct string as copy of a substring.
__versa_string & replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
Replace characters with multiple characters.
__versa_string & erase(size_type __pos=0, size_type __n=npos)
Remove characters.
__versa_string & append(size_type __n, _CharT __c)
Append multiple characters.
__versa_string & append(const _CharT *__s)
Append a C string.
size_type max_size() const noexcept
Returns the size() of the largest possible string.
const_iterator end() const noexcept
__versa_string & assign(_InputIterator __first, _InputIterator __last)
Set value to a range of characters.
const_iterator cbegin() const noexcept
__versa_string & assign(std::initializer_list< _CharT > __l)
Set value to an initializer_list of characters.
__versa_string & replace(const_iterator __i1, const_iterator __i2, const __versa_string &__str)
Replace range of characters with string.
__versa_string & replace(const_iterator __i1, const_iterator __i2, std::initializer_list< _CharT > __l)
Replace range of characters with initializer_list.
size_type rfind(const _CharT *__s, size_type __pos=npos) const
Find last position of a C string.
size_type copy(_CharT *__s, size_type __n, size_type __pos=0) const
Copy substring into C string.
__versa_string & operator=(__versa_string &&__str) noexcept
String move assignment operator.
size_type find_first_of(const _CharT *__s, size_type __pos=0) const
Find position of a character of C string.
iterator insert(const_iterator __p, size_type __n, _CharT __c)
Insert multiple characters.
void push_back(_CharT __c)
Append a single character.
__versa_string & operator+=(std::initializer_list< _CharT > __l)
Append an initializer_list of characters.
size_type find_last_of(_CharT __c, size_type __pos=npos) const noexcept
Find last position of a character.
reference front() noexcept
__versa_string & replace(size_type __pos, size_type __n, const __versa_string &__str)
Replace characters with value from another string.
__versa_string(const __versa_string &__str)
Construct string with copy of value of __str.
void reserve(size_type __res_arg=0)
Attempt to preallocate enough memory for specified number of characters.
__versa_string & assign(const _CharT *__s, size_type __n)
Set value to a C substring.
size_type rfind(const __versa_string &__str, size_type __pos=npos) const noexcept
Find last position of a string.
const_reverse_iterator crend() const noexcept
void pop_back()
Remove the last character.
__versa_string & replace(const_iterator __i1, const_iterator __i2, _InputIterator __k1, _InputIterator __k2)
Replace range of characters with range.
reverse_iterator rbegin() noexcept
size_type find(const _CharT *__s, size_type __pos=0) const
Find position of a C string.