summaryrefslogtreecommitdiffstats
path: root/contrib/libstdc++/include/bits/basic_string.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libstdc++/include/bits/basic_string.h')
-rw-r--r--contrib/libstdc++/include/bits/basic_string.h31
1 files changed, 29 insertions, 2 deletions
diff --git a/contrib/libstdc++/include/bits/basic_string.h b/contrib/libstdc++/include/bits/basic_string.h
index e05a1c6..a9c02ce 100644
--- a/contrib/libstdc++/include/bits/basic_string.h
+++ b/contrib/libstdc++/include/bits/basic_string.h
@@ -650,8 +650,11 @@ namespace std
|| less<const _CharT*>()(_M_data() + __size, __s))
return _M_replace_safe(_M_ibegin() + __pos,
_M_ibegin() + __pos + __foldn1, __s, __s + __n2);
- else return this->replace(_M_check(__pos), _M_fold(__pos, __n1),
- __s, __s + __n2);
+ // Todo: optimized in-place replace.
+ else return
+ _M_replace(_M_ibegin() + __pos, _M_ibegin() + __pos + __foldn1,
+ __s, __s + __n2,
+ typename iterator_traits<const _CharT*>::iterator_category());
}
basic_string&
@@ -685,6 +688,30 @@ namespace std
{ return _M_replace(__i1, __i2, __k1, __k2,
typename iterator_traits<_InputIterator>::iterator_category()); }
+ // Specializations for the common case of pointer and iterator:
+ // useful to avoid the overhead of temporary buffering in _M_replace.
+ basic_string&
+ replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2)
+ { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+ __k1, __k2 - __k1); }
+
+ basic_string&
+ replace(iterator __i1, iterator __i2, const _CharT* __k1, const _CharT* __k2)
+ { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+ __k1, __k2 - __k1); }
+
+ basic_string&
+ replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2)
+ { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+ __k1.base(), __k2 - __k1);
+ }
+
+ basic_string&
+ replace(iterator __i1, iterator __i2, const_iterator __k1, const_iterator __k2)
+ { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+ __k1.base(), __k2 - __k1);
+ }
+
private:
template<class _InputIterator>
basic_string&
OpenPOWER on IntegriCloud