_string_sum.h revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2003 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Francois Dumont 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_STRING_SUM_H 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_STRING_SUM_H 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*char wrapper to simulate basic_string*/ 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __char_wrapper { 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _CharT& const_reference; 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __char_wrapper(_CharT __val) : _Val(__val) {} 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharT getValue() const { return _Val; } 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t size() const { return 1; } 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference operator[] (size_t __n) const { 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //To avoid a check on __n we use this strange implementation 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (&_Val)[__n]; 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharT _Val; 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*C string wrapper to simulate basic_string*/ 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __cstr_wrapper { 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _CharT& const_reference; 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __cstr_wrapper(const _CharT *__cstr, size_t __size) : 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CStr(__cstr), _Size(__size) {} 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* c_str() const { return _CStr; } 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t size() const { return _Size; } 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference operator[] (size_t __n) const { return _CStr[__n]; } 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT *_CStr; 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t _Size; 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*basic_string wrapper to ensure that we only store a reference to the original string and not copy it*/ 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc> 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __bstr_wrapper { 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _CharT& const_reference; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_string<_CharT, _Traits, _Alloc> _BString; 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_wrapper (_BString const& __s) : 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BStr(__s) {} 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t size() const { return _BStr.size(); } 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference operator[] (size_t __n) const { return _BStr[__n]; } 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& b_str() const { return _BStr; } 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _BStr; 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __on_left {}; 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __on_right {}; 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Left, class _Right, 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _StorageDirection> 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass __bstr_sum { 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_string<_CharT, _Traits, _Alloc> _BString; 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _BString::const_reference const_reference; 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _BString::const_iterator const_iterator; 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _BString::const_reverse_iterator const_reverse_iterator; 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _BString::size_type size_type; 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _BString::allocator_type allocator_type; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __bstr_sum<_CharT, _Traits, _Alloc, _Left, _Right, _StorageDirection> _Self; 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_sum (_Left const& lhs, _Right const& rhs) : 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _lhs(lhs), _rhs(rhs) {} 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Left const& getLhs() const { return _lhs; } 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Right const& getRhs() const { return _rhs; } 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block allocator_type get_allocator() const { return _M_get_storage(false).get_allocator(); } 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator begin() const { return _M_get_storage().begin(); } 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator end() const { return _M_get_storage().end(); } 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rbegin() const { return _M_get_storage().rbegin(); } 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rend() const { return _M_get_storage().rend(); } 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type size() const { return _lhs.size() + _rhs.size(); } 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type length() const { return size(); } 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t max_size() const { return _M_get_storage().max_size(); } 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type capacity() const { return size(); } 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool empty() const { return size() == 0; } 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference operator[](size_t __n) const 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (__n < _lhs.size())?_lhs[__n]:_rhs[__n - _lhs.size()]; } 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference at(size_type __n) const 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().at(__n); } 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //operator += 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __bstr_sum<_CharT, _Traits, _Alloc, _Self, __bstr_wrapper<_CharT, _Traits, _Alloc>, __on_left> _BStrOnLeft; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BStrOnLeft operator += (const _BString& __s) { return append(__s); } 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __bstr_sum<_CharT, _Traits, _Alloc, _Self, __cstr_wrapper<_CharT>, __on_left> _CStrOnLeft; 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CStrOnLeft operator += (const _CharT* __s) { return append(__s); } 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __bstr_sum<_CharT, _Traits, _Alloc, _Self, __char_wrapper<_CharT>, __on_left> _CharOnLeft; 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharOnLeft operator += (_CharT __c) { return _CharOnLeft(*this, __c); } 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //append 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BStrOnLeft append (const _BString& __s) 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _BStrOnLeft(*this, __s); } 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& append(const _BString& __s, size_type __pos, size_type __n) 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().append(__s, __pos, __n); } 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CStrOnLeft append(const _CharT* __s) { 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const size_type __n = _Traits::length(__s); 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _CStrOnLeft(*this, __cstr_wrapper<_CharT>(__s, __n)); 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CStrOnLeft append(const _CharT* __s, size_type __n) 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _CStrOnLeft(*this, __cstr_wrapper<_CharT>(__s, __n)); } 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& append(size_type __n, _CharT __c) 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().append(__n, __c);} 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& append(_InputIter __first, _InputIter __last) 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().append(__first, __last);} 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //assign 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& assign(const _BString& __s) {return _M_get_storage().assign(__s);} 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& assign(const _BString& __s, size_type __pos, size_type __n) {return _M_get_storage().assign(__s, __pos, __n);} 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& assign(const _CharT* __s, size_type __n) {return _M_get_storage().assign(__s, __n);} 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& assign(const _CharT* __s) {return _M_get_storage().assign(__s); } 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& assign(size_type __n, _CharT __c) {return _M_get_storage().assign(__n, __c);} 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //insert 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& insert(size_type __pos, const _BString& __s) {return _M_get_storage().insert(__pos, __s);} 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& insert(size_type __pos, const _BString& __s, size_type __beg, size_type __n) 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().insert(__pos, __s, __beg, __n);} 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& insert(size_type __pos, const _CharT* __s, size_type __n) {return _M_get_storage().insert(__pos, __s, __n);} 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& insert(size_type __pos, const _CharT* __s) {return _M_get_storage().insert(__pos, __s);} 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& insert(size_type __pos, size_type __n, _CharT __c) {return _M_get_storage().insert(__pos, __n, __c);} 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //erase 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& erase(size_type __pos = 0, size_type __n =_BString::npos) {return _M_get_storage().erase(__pos, __n);} 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //replace 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& replace(size_type __pos, size_type __n, const _BString& __s) 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().replace(__pos, __n, __s);} 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& replace(size_type __pos1, size_type __n1, const _BString& __s, size_type __pos2, size_type __n2) 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().replace(__pos1, __n1, __s, __pos2, __n2);} 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& replace(size_type __pos, size_type __n1, const _CharT* __s, size_type __n2) 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().replace(__pos, __n1, __s, __n2);} 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& replace(size_type __pos, size_type __n1, const _CharT* __s) 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().replace(__pos, __n1, __s);} 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().replace(__pos, __n1, __n2, __c);} 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type copy(_CharT* __s, size_type __n, size_type __pos = 0) const 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {return _M_get_storage().copy(__s, __n, __pos);} 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void swap(_BString& __s) 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {_M_get_storage().swap(__s);} 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* c_str() const { return _M_get_storage().c_str(); } 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* data() const { return _M_get_storage().data(); } 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //find family 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find(const _BString& __s, size_type __pos = 0) const { return _M_get_storage().find(__s, __pos); } 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find(const _CharT* __s, size_type __pos = 0) const { return _M_get_storage().find(__s, __pos); } 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find(const _CharT* __s, size_type __pos, size_type __n) const { return _M_get_storage().find(__s, __pos, __n); } 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find(_CharT __c, size_type __pos = 0) const { return _M_get_storage().find(__c, __pos); } 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type rfind(const _BString& __s, size_type __pos = _BString::npos) const { return _M_get_storage().rfind(__s, __pos); } 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type rfind(const _CharT* __s, size_type __pos = _BString::npos) const { return _M_get_storage().rfind(__s, __pos); } 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type rfind(const _CharT* __s, size_type __pos, size_type __n) const { return _M_get_storage().rfind(__s, __pos, __n); } 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type rfind(_CharT __c, size_type __pos = _BString::npos) const { return _M_get_storage().rfind(__c, __pos); } 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_of(const _BString& __s, size_type __pos = 0) const 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_of(__s, __pos); } 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_of(const _CharT* __s, size_type __pos = 0) const 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_of(__s, __pos); } 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_of(const _CharT* __s, size_type __pos, size_type __n) const 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_of(__s, __pos, __n); } 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_of(_CharT __c, size_type __pos = 0) const 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find(__c, __pos); } 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_of(const _BString& __s, size_type __pos = _BString::npos) const 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_of(__s, __pos); } 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_of(const _CharT* __s, size_type __pos = _BString::npos) const 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_of(__s, __pos); } 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_of(const _CharT* __s, size_type __pos, size_type __n) const 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_of(__s, __pos, __n); } 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_of(_CharT __c, size_type __pos = _BString::npos) const 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().rfind(__c, __pos); } 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_not_of(const _BString& __s, size_type __pos = 0) const 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_not_of(__s, __pos); } 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_not_of(const _CharT* __s, size_type __pos = 0) const 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_not_of(__s, __pos); } 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_not_of(__s, __pos, __n); } 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_first_not_of(_CharT __c, size_type __pos = 0) const 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_first_not_of(__c, __pos); } 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_not_of(const _BString& __s, size_type __pos = _BString::npos) const 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_not_of(__s, __pos); } 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_not_of(const _CharT* __s, size_type __pos =_BString:: npos) const 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_not_of(__s, __pos); } 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_not_of(__s, __pos, __n); } 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type find_last_not_of(_CharT __c, size_type __pos = _BString::npos) const 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().find_last_not_of(__c, __pos); } 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString substr(size_type __pos = 0, size_type __n = _BString::npos) const 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().substr(__pos, __n); } 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //compare 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(const _BString& __s) const 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__s); } 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(size_type __pos1, size_type __n1, const _Self& __s) const 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__pos1, __n1, __s); } 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(size_type __pos1, size_type __n1, const _Self& __s, size_type __pos2, size_type __n2) const 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__pos1, __n1, __s, __pos2, __n2); } 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(const _CharT* __s) const 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__s); } 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(size_type __pos1, size_type __n1, const _CharT* __s) const 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__pos1, __n1, __s); } 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int compare(size_type __pos1, size_type __n1, const _CharT* __s, size_type __n2) const 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage().compare(__pos1, __n1, __s, __n2); } 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Returns the underlying basic_string representation of the template expression 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //The non const method will always initialise it. 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& _M_get_storage() 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _rhs._M_get_storage(*this, _StorageDirection()); } 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref, 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __on_left const& /*StorageDir*/) 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _lhs._M_get_storage(__ref); } 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref, 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __on_right const& /*StorageDir*/) 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _rhs._M_get_storage(__ref); } 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref) 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage(__ref, _StorageDirection()); } 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //The const method can be invoked without initialising the basic_string so avoiding dynamic allocation. 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _M_get_storage(bool __do_init = true) const 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage(*this, __do_init, _StorageDirection()); } 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref, 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __do_init, __on_left const& /*StorageDir*/) const 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _lhs._M_get_storage(__ref, __do_init); } 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref, 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __do_init, __on_right const& /*StorageDir*/) const 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _rhs._M_get_storage(__ref, __do_init); } 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Lhs, class _Rhs, class _StorageDir> 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Lhs, _Rhs, _StorageDir> const& __ref, 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __do_init) const 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_get_storage(__ref, __do_init, _StorageDirection()); } 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Left _lhs; 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Right _rhs; 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * For this operator we choose to use the right part as the storage part 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline __bstr_sum<_CharT, _Traits, _Alloc, 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1>, 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2>, 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __on_right> _STLP_CALL 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator + (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) { 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __bstr_sum<_CharT, _Traits, _Alloc, 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1>, 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2>, 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __on_right>(__lhs, __rhs); 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator == (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (__lhs.size() == __rhs.size()) && (__lhs._M_get_storage() == __rhs._M_get_storage()); } 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator < (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __lhs._M_get_storage() < __rhs._M_get_storage(); } 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator != (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return !(__lhs == __rhs); } 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator > (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __rhs < __lhs; } 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator <= (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return !(__rhs < __lhs); } 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc, 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh1, class _Rh1, class _StoreDir1, 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Lh2, class _Rh2, class _StoreDir2> 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator >= (const __bstr_sum<_CharT, _Traits, _Alloc, _Lh1, _Rh1, _StoreDir1> &__lhs, 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __bstr_sum<_CharT, _Traits, _Alloc, _Lh2, _Rh2, _StoreDir2> &__rhs) 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return !(__lhs < __rhs); } 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_SEPARATE_RELOPS_NAMESPACE */ 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This class will be used to simulate a temporary string that is required for 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * a call to the c_str method on the __bstr_sum class. 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc> 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __sum_storage_elem { 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __sum_storage_elem<_CharT, _Traits, _Alloc> _Self; 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_string<_CharT, _Traits, _Alloc> _BString; 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __sum_storage_elem(_Alloc __alloc) : _M_init(false), _M_storage(__alloc) 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {} 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Left, class _Right, class _StorageDir> 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_Init(__bstr_sum<_CharT, _Traits, _Alloc, _Left, _Right, _StorageDir> const& __ref) const { 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!_M_init) { 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_MUTABLE(_Self, _M_storage) = __ref; 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_MUTABLE(_Self, _M_init) = true; 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Left, class _Right, class _StorageDir> 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString const& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Left, _Right, _StorageDir> const& __ref, 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __do_init) const { 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__do_init) { 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_Init(__ref); 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_storage; 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Left, class _Right, class _StorageDir> 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BString& _M_get_storage(__bstr_sum<_CharT, _Traits, _Alloc, _Left, _Right, _StorageDir> const& __ref) { 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_Init(__ref); 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_storage; 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t size() const { return 0; } 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharT const& operator[](size_t __n) const 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return __STATIC_CAST(_CharT*, 0)[__n]; } 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block mutable bool _M_init; 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block mutable basic_string<_CharT, _Traits, _Alloc> _M_storage; 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_STRING_SUM_H*/ 415