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.h67
1 files changed, 44 insertions, 23 deletions
diff --git a/contrib/libstdc++/include/bits/basic_string.h b/contrib/libstdc++/include/bits/basic_string.h
index 16fe5ac..04e1500 100644
--- a/contrib/libstdc++/include/bits/basic_string.h
+++ b/contrib/libstdc++/include/bits/basic_string.h
@@ -211,7 +211,9 @@ namespace std
void
_M_dispose(const _Alloc& __a)
{
+#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
if (__builtin_expect(this != &_S_empty_rep(), false))
+#endif
if (__gnu_cxx::__exchange_and_add(&this->_M_refcount, -1) <= 0)
_M_destroy(__a);
} // XXX MT
@@ -222,7 +224,9 @@ namespace std
_CharT*
_M_refcopy() throw()
{
+#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
if (__builtin_expect(this != &_S_empty_rep(), false))
+#endif
__gnu_cxx::__atomic_add(&this->_M_refcount, 1);
return _M_refdata();
} // XXX MT
@@ -1846,9 +1850,11 @@ namespace std
*
* Returns an integer < 0 if this string is ordered before @a str, 0 if
* their values are equivalent, or > 0 if this string is ordered after
- * @a str. If the lengths of @a str and this string are different, the
- * shorter one is ordered first. If they are the same, returns the
- * result of traits::compare(data(),str.data(),size());
+ * @a str. Determines the effective length rlen of the strings to
+ * compare as the smallest of size() and str.size(). The function
+ * then compares the two strings by calling traits::compare(data(),
+ * str.data(),rlen). If the result of the comparison is nonzero returns
+ * it, otherwise the shorter one is ordered first.
*/
int
compare(const basic_string& __str) const
@@ -1873,10 +1879,12 @@ namespace std
* Form the substring of this string from the @a n characters starting
* at @a pos. Returns an integer < 0 if the substring is ordered
* before @a str, 0 if their values are equivalent, or > 0 if the
- * substring is ordered after @a str. If the lengths @a of str and the
- * substring are different, the shorter one is ordered first. If they
- * are the same, returns the result of
- * traits::compare(substring.data(),str.data(),size());
+ * substring is ordered after @a str. Determines the effective length
+ * rlen of the strings to compare as the smallest of the length of the
+ * substring and @a str.size(). The function then compares the two
+ * strings by calling traits::compare(substring.data(),str.data(),rlen).
+ * If the result of the comparison is nonzero returns it, otherwise the
+ * shorter one is ordered first.
*/
int
compare(size_type __pos, size_type __n, const basic_string& __str) const;
@@ -1895,10 +1903,12 @@ namespace std
* starting at @a pos2. Returns an integer < 0 if this substring is
* ordered before the substring of @a str, 0 if their values are
* equivalent, or > 0 if this substring is ordered after the substring
- * of @a str. If the lengths of the substring of @a str and this
- * substring are different, the shorter one is ordered first. If they
- * are the same, returns the result of
- * traits::compare(substring.data(),str.substr(pos2,n2).data(),size());
+ * of @a str. Determines the effective length rlen of the strings
+ * to compare as the smallest of the lengths of the substrings. The
+ * function then compares the two strings by calling
+ * traits::compare(substring.data(),str.substr(pos2,n2).data(),rlen).
+ * If the result of the comparison is nonzero returns it, otherwise the
+ * shorter one is ordered first.
*/
int
compare(size_type __pos1, size_type __n1, const basic_string& __str,
@@ -1911,9 +1921,12 @@ namespace std
*
* Returns an integer < 0 if this string is ordered before @a s, 0 if
* their values are equivalent, or > 0 if this string is ordered after
- * @a s. If the lengths of @a s and this string are different, the
- * shorter one is ordered first. If they are the same, returns the
- * result of traits::compare(data(),s,size());
+ * @a s. Determines the effective length rlen of the strings to
+ * compare as the smallest of size() and the length of a string
+ * constructed from @a s. The function then compares the two strings
+ * by calling traits::compare(data(),s,rlen). If the result of the
+ * comparison is nonzero returns it, otherwise the shorter one is
+ * ordered first.
*/
int
compare(const _CharT* __s) const;
@@ -1930,10 +1943,13 @@ namespace std
* Form the substring of this string from the @a n1 characters starting
* at @a pos. Returns an integer < 0 if the substring is ordered
* before @a s, 0 if their values are equivalent, or > 0 if the
- * substring is ordered after @a s. If the lengths of @a s and the
- * substring are different, the shorter one is ordered first. If they
- * are the same, returns the result of
- * traits::compare(substring.data(),s,size());
+ * substring is ordered after @a s. Determines the effective length
+ * rlen of the strings to compare as the smallest of the length of the
+ * substring and the length of a string constructed from @a s. The
+ * function then compares the two string by calling
+ * traits::compare(substring.data(),s,rlen). If the result of the
+ * comparison is nonzero returns it, otherwise the shorter one is
+ * ordered first.
*/
int
compare(size_type __pos, size_type __n1, const _CharT* __s) const;
@@ -1950,10 +1966,12 @@ namespace std
* at @a pos1. Form a string from the first @a n2 characters of @a s.
* Returns an integer < 0 if this substring is ordered before the string
* from @a s, 0 if their values are equivalent, or > 0 if this substring
- * is ordered after the string from @a s. If the lengths of this
- * substring and @a n2 are different, the shorter one is ordered first.
- * If they are the same, returns the result of
- * traits::compare(substring.data(),s,size());
+ * is ordered after the string from @a s. Determines the effective
+ * length rlen of the strings to compare as the smallest of the length
+ * of the substring and @a n2. The function then compares the two
+ * strings by calling traits::compare(substring.data(),s,rlen). If the
+ * result of the comparison is nonzero returns it, otherwise the shorter
+ * one is ordered first.
*
* NB: s must have at least n2 characters, '\0' has no special
* meaning.
@@ -1963,11 +1981,14 @@ namespace std
size_type __n2) const;
};
-
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>::
basic_string()
+#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
: _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { }
+#else
+ : _M_dataplus(_S_construct(size_type(), _CharT(), _Alloc()), _Alloc()) { }
+#endif
// operator+
/**
OpenPOWER on IntegriCloud