From cfed15f5a1bcbd6ebdefe1897bc6a5e312e8a5e5 Mon Sep 17 00:00:00 2001 From: "scc%netscape.com" Date: Thu, 23 Mar 2000 21:15:01 +0000 Subject: [PATCH] Added "nsCharTraits.h"; no longer relying on |std::char_traits|. Renamed some things so overloading wouldn't fight with overriding. git-svn-id: svn://10.0.0.236/trunk@63876 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/string/obsolete/nsString.cpp | 4 +- mozilla/string/obsolete/nsString.h | 10 +- mozilla/string/obsolete/nsString2.cpp | 4 +- mozilla/string/obsolete/nsString2.h | 8 +- mozilla/string/public/nsAReadableString.h | 168 +++++++++--------- mozilla/string/public/nsAWritableString.h | 147 +++++++-------- mozilla/xpcom/ds/nsAReadableString.h | 168 +++++++++--------- mozilla/xpcom/ds/nsAWritableString.h | 147 +++++++-------- mozilla/xpcom/ds/nsString.cpp | 4 +- mozilla/xpcom/ds/nsString.h | 10 +- mozilla/xpcom/ds/nsString2.cpp | 4 +- mozilla/xpcom/ds/nsString2.h | 8 +- mozilla/xpcom/string/obsolete/nsString.cpp | 4 +- mozilla/xpcom/string/obsolete/nsString.h | 10 +- mozilla/xpcom/string/obsolete/nsString2.cpp | 4 +- mozilla/xpcom/string/obsolete/nsString2.h | 8 +- .../xpcom/string/public/nsAReadableString.h | 168 +++++++++--------- .../xpcom/string/public/nsAWritableString.h | 147 +++++++-------- .../tests/StringFactoringTests/StringTest.mcp | Bin 209102 -> 209126 bytes .../StringFactoringTests/nsStdStringWrapper.h | 18 +- .../tests/StringFactoringTests/test_main.cc | 22 +-- 21 files changed, 512 insertions(+), 551 deletions(-) diff --git a/mozilla/string/obsolete/nsString.cpp b/mozilla/string/obsolete/nsString.cpp index 847dccf1ab3..37be74d2a6c 100644 --- a/mozilla/string/obsolete/nsString.cpp +++ b/mozilla/string/obsolete/nsString.cpp @@ -126,7 +126,7 @@ nsCString::~nsCString() { } #ifdef NEW_STRING_APIS -const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const char* nsCString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -141,7 +141,7 @@ const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentReque } } -char* nsCString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +char* nsCString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/string/obsolete/nsString.h b/mozilla/string/obsolete/nsString.h index 07da8428487..449423952f7 100644 --- a/mozilla/string/obsolete/nsString.h +++ b/mozilla/string/obsolete/nsString.h @@ -60,12 +60,12 @@ class NS_COM nsCString : #ifdef NEW_STRING_APIS protected: - typedef nsAReadableCString::FragmentRequest FragmentRequest; - typedef nsAReadableCString::ConstFragment ConstFragment; - typedef nsAWritableCString::Fragment Fragment; + typedef nsAReadableCString::FragmentRequest FragmentRequest; + typedef nsAReadableCString::ReadableFragment ReadableFragment; + typedef nsAWritableCString::WritableFragment WritableFragment; - virtual const char* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual char* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const char* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual char* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsCString( const nsAReadableCString& ); diff --git a/mozilla/string/obsolete/nsString2.cpp b/mozilla/string/obsolete/nsString2.cpp index 8c404d72f36..c552636972f 100644 --- a/mozilla/string/obsolete/nsString2.cpp +++ b/mozilla/string/obsolete/nsString2.cpp @@ -137,7 +137,7 @@ nsString::~nsString() { } #ifdef NEW_STRING_APIS -const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const PRUnichar* nsString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -152,7 +152,7 @@ const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentR } } -PRUnichar* nsString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +PRUnichar* nsString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/string/obsolete/nsString2.h b/mozilla/string/obsolete/nsString2.h index 0e51afe765c..9394ed50383 100644 --- a/mozilla/string/obsolete/nsString2.h +++ b/mozilla/string/obsolete/nsString2.h @@ -68,11 +68,11 @@ class NS_COM nsString : #ifdef NEW_STRING_APIS protected: typedef nsAReadableString::FragmentRequest FragmentRequest; - typedef nsAReadableString::ConstFragment ConstFragment; - typedef nsAWritableString::Fragment Fragment; + typedef nsAReadableString::ReadableFragment ReadableFragment; + typedef nsAWritableString::WritableFragment WritableFragment; - virtual const PRUnichar* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const PRUnichar* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual PRUnichar* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsString( const nsAReadableString& ); diff --git a/mozilla/string/public/nsAReadableString.h b/mozilla/string/public/nsAReadableString.h index 2e3eeed9404..3b8209e4bbd 100644 --- a/mozilla/string/public/nsAReadableString.h +++ b/mozilla/string/public/nsAReadableString.h @@ -26,15 +26,20 @@ // WORK IN PROGRESS +#ifndef nscore_h___ #include "nscore.h" // for |PRUnichar| +#endif -#include - // for |char_traits| +#ifndef _nsCharTraits_h__ +#include "nsCharTraits.h" +#endif #include // for |bidirectional_iterator_tag| +#include + /* This file defines the abstract interfaces |nsAReadableString| and @@ -77,13 +82,13 @@ class basic_nsAReadableString { protected: - struct ConstFragment + struct ReadableFragment { const CharT* mStart; const CharT* mEnd; PRUint32 mFragmentIdentifier; - ConstFragment() + ReadableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -96,12 +101,12 @@ class basic_nsAReadableString enum FragmentRequest { kPrevFragment, kFirstFragment, kLastFragment, kNextFragment, kFragmentAt }; - // Damn! Had to make |GetConstFragment| public because the compilers suck. Should be protected. - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; + // Damn! Had to make |GetReadableFragment| public because the compilers suck. Should be protected. + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; - friend class ConstIterator; - class ConstIterator - : public std::bidirectional_iterator_tag + friend class ReadingIterator; + class ReadingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -113,15 +118,16 @@ class basic_nsAReadableString private: friend class basic_nsAReadableString; - ConstFragment mFragment; - const CharT* mPosition; + ReadableFragment mFragment; + const CharT* mPosition; const basic_nsAReadableString* mOwningString; + void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetConstFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -129,13 +135,13 @@ class basic_nsAReadableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetConstFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - ConstIterator( const ConstFragment& aFragment, - const CharT* aStartingPosition, - const basic_nsAReadableString& aOwningString ) + ReadingIterator( const ReadableFragment& aFragment, + const CharT* aStartingPosition, + const basic_nsAReadableString& aOwningString ) : mFragment(aFragment), mPosition(aStartingPosition), mOwningString(&aOwningString) @@ -144,8 +150,8 @@ class basic_nsAReadableString } public: - // ConstIterator( const ConstIterator& ); ...use default copy-constructor - // ConstIterator& operator=( const ConstIterator& ); ...use default copy-assignment operator + // ReadingIterator( const ReadingIterator& ); ...use default copy-constructor + // ReadingIterator& operator=( const ReadingIterator& ); ...use default copy-assignment operator CharT @@ -160,7 +166,7 @@ class basic_nsAReadableString return mPosition; } - ConstIterator& + ReadingIterator& operator++() { ++mPosition; @@ -168,16 +174,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator++( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); ++mPosition; normalize_forward(); return result; } - ConstIterator& + ReadingIterator& operator--() { normalize_backward(); @@ -185,16 +191,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator--( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); normalize_backward(); --mPosition; return result; } - const ConstFragment& + const ReadableFragment& fragment() const { return mFragment; @@ -212,7 +218,7 @@ class basic_nsAReadableString return mPosition - mFragment.mStart; } - ConstIterator& + ReadingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -220,7 +226,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -229,7 +235,7 @@ class basic_nsAReadableString return *this; } - ConstIterator& + ReadingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -237,7 +243,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -250,39 +256,41 @@ class basic_nsAReadableString // Damn again! Problems with templates made me implement comparisons as members. PRBool - operator==( const ConstIterator& rhs ) const + operator==( const ReadingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const ConstIterator& rhs ) const + operator!=( const ReadingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef ReadingIterator ConstIterator; + public: - ConstIterator - Begin( PRUint32 aOffset = 0 ) const + ReadingIterator + BeginReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, aOffset); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, aOffset); + return ReadingIterator(fragment, startPos, *this); } - ConstIterator - End( PRUint32 aOffset = 0 ) const + ReadingIterator + EndReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return ReadingIterator(fragment, startPos, *this); } public: - virtual ~basic_nsAReadableString() { } + virtual ~basic_nsAReadableString() { } // ...yes, I expect to be sub-classed. virtual PRUint32 Length() const = 0; @@ -445,8 +453,8 @@ const char* basic_nsAReadableString::GetBuffer() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -456,8 +464,8 @@ const PRUnichar* basic_nsAReadableString::GetUnicode() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -472,7 +480,7 @@ basic_nsAReadableString::Implementation() const /* Note: the following four functions, |CharAt|, |operator[]|, |First|, and |Last|, are implemented - in the simplest reasonable scheme; by calling |GetConstFragment| and resolving the pointer it + in the simplest reasonable scheme; by calling |GetReadableFragment| and resolving the pointer it returns. The alternative is to force at least one of these methods to be |virtual|. The ideal candidate for that change would be |CharAt|. @@ -488,8 +496,8 @@ CharT basic_nsAReadableString::CharAt( PRUint32 aIndex ) const { // ??? Is |CharAt()| supposed to be the 'safe' version? - ConstFragment fragment; - return *GetConstFragment(fragment, kFragmentAt, aIndex); + ReadableFragment fragment; + return *GetReadableFragment(fragment, kFragmentAt, aIndex); } template @@ -521,12 +529,12 @@ PRUint32 basic_nsAReadableString::CountChar( CharT c ) const { #if 1 - return PRUint32(count(Begin(), End(), c)); + return PRUint32(count(BeginReading(), EndReading(), c)); #else PRUint32 result = 0; PRUint32 lengthToExamine = Length(); - ConstIterator iter( Begin() ); + ReadingIterator iter( BeginReading() ); for (;;) { PRUint32 lengthToExamineInThisFragment = iter.size_forward(); @@ -567,7 +575,7 @@ PRUint32 basic_nsAReadableString::Right( basic_nsAWritableString& aResult, PRUint32 aLengthToCopy ) const { PRUint32 myLength = Length(); - aLengthToCopy = std::min(myLength, aLengthToCopy); + aLengthToCopy = min(myLength, aLengthToCopy); aResult = Substring(*this, myLength-aLengthToCopy, aLengthToCopy); return aResult.Length(); } @@ -621,17 +629,17 @@ class basic_nsLiteralString */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: // Note: _not_ explicit basic_nsLiteralString( const CharT* aLiteral ) : mStart(aLiteral), - mEnd(mStart + char_traits::length(mStart)) + mEnd(mStart + nsCharTraits::length(mStart)) { // nothing else to do here } @@ -654,7 +662,7 @@ NS_DEF_STRING_COMPARISONS(basic_nsLiteralString) template const CharT* -basic_nsLiteralString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const +basic_nsLiteralString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -697,7 +705,7 @@ class nsPromiseConcatenation Instances of this class only exist as anonymous temporary results from |operator+()|. This is the machinery that makes string concatenation efficient. No allocations or character copies are required unless and until a final assignment is made. It works - its magic by overriding and forwarding calls to |GetConstFragment()|. + its magic by overriding and forwarding calls to |GetReadableFragment()|. Note: |nsPromiseConcatenation| imposes some limits on string concatenation with |operator+()|. - no more than 33 strings, e.g., |s1 + s2 + s3 + ... s32 + s33| @@ -708,32 +716,32 @@ class nsPromiseConcatenation for a user to need to control it. Too many strings summed together can easily be worked around with an intermediate assignment. I wouldn't have the parentheses limitation if I assigned the identifier mask starting at the top, the first time anybody called - |GetConstFragment()|. + |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; enum { kLeftString, kRightString }; int - GetCurrentStringFromFragment( const ConstFragment& aFragment ) const + GetCurrentStringFromFragment( const ReadableFragment& aFragment ) const { return (aFragment.mFragmentIdentifier & mFragmentIdentifierMask) ? kRightString : kLeftString; } int - SetLeftStringInFragment( ConstFragment& aFragment ) const + SetLeftStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier &= ~mFragmentIdentifierMask; return kLeftString; } int - SetRightStringInFragment( ConstFragment& aFragment ) const + SetRightStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier |= mFragmentIdentifierMask; return kRightString; @@ -772,14 +780,14 @@ nsPromiseConcatenation::Length() const template const CharT* -nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseConcatenation::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { const int kLeftString = 0; const int kRightString = 1; int whichString; - // based on the request, pick which string we will forward the |GetConstFragment()| call into + // based on the request, pick which string we will forward the |GetReadableFragment()| call into switch ( aRequest ) { @@ -814,7 +822,7 @@ nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, Fragm do { done = true; - result = mStrings[whichString]->GetConstFragment(aFragment, aRequest, aPosition); + result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition); if ( !result ) { @@ -862,20 +870,20 @@ class nsPromiseSubstring ...not unlike |nsPromiseConcatenation|. Instances of this class exist only as anonymous temporary results from |Substring()|. Like |nsPromiseConcatenation|, this class only holds a pointer, no string data of its own. It does its magic by overriding and forwarding - calls to |GetConstFragment()|. + calls to |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: nsPromiseSubstring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), - mStartPos( std::min(aStartPos, aString.Length()) ), - mLength( std::min(aLength, aString.Length()-mStartPos) ) + mStartPos( min(aStartPos, aString.Length()) ), + mLength( min(aLength, aString.Length()-mStartPos) ) { // nothing else to do here } @@ -899,7 +907,7 @@ nsPromiseSubstring::Length() const template const CharT* -nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseSubstring::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -917,7 +925,7 @@ nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentR else if ( aRequest == kFragmentAt ) aPosition += mStartPos; - return mString.GetConstFragment(aFragment, aRequest, aPosition); + return mString.GetReadableFragment(aFragment, aRequest, aPosition); } @@ -945,20 +953,20 @@ Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableStrin PRUint32 lLength = lhs.Length(); PRUint32 rLength = rhs.Length(); - PRUint32 lengthToCompare = std::min(lLength, rLength); + PRUint32 lengthToCompare = min(lLength, rLength); - basic_nsAReadableString::ConstIterator leftIter( lhs.Begin() ); - basic_nsAReadableString::ConstIterator rightIter( rhs.Begin() ); + basic_nsAReadableString::ReadingIterator leftIter( lhs.BeginReading() ); + basic_nsAReadableString::ReadingIterator rightIter( rhs.BeginReading() ); for (;;) { - PRUint32 lengthAvailable = PRUint32( std::min(leftIter.size_forward(), rightIter.size_forward()) ); + PRUint32 lengthAvailable = PRUint32( min(leftIter.size_forward(), rightIter.size_forward()) ); // assert( lengthAvailable >= 0 ); if ( lengthAvailable > lengthToCompare ) lengthAvailable = lengthToCompare; - if ( int result = std::char_traits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) + if ( int result = nsCharTraits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) return result; if ( !(lengthToCompare -= lengthAvailable) ) @@ -1046,10 +1054,10 @@ operator+( const basic_nsLiteralString& lhs, const basic_nsLiteralString< #ifdef SCC_TESTS template -std::basic_ostream& +basic_ostream& operator<<( basic_ostream& os, const basic_nsAReadableString& s ) { - std::copy(s.Begin(), s.End(), ostream_iterator(os)); + copy(s.BeginReading(), s.EndReading(), ostream_iterator(os)); return os; } #endif diff --git a/mozilla/string/public/nsAWritableString.h b/mozilla/string/public/nsAWritableString.h index eb0f646dfa4..cab014fb615 100644 --- a/mozilla/string/public/nsAWritableString.h +++ b/mozilla/string/public/nsAWritableString.h @@ -48,13 +48,13 @@ class basic_nsAWritableString protected: typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - struct Fragment + struct WritableFragment { CharT* mStart; CharT* mEnd; PRUint32 mFragmentIdentifier; - Fragment() + WritableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -62,11 +62,11 @@ class basic_nsAWritableString }; public: - virtual CharT* GetFragment( Fragment&, FragmentRequest, PRUint32 = 0 ) = 0; + virtual CharT* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 = 0 ) = 0; - friend class Iterator; - class Iterator - : public std::bidirectional_iterator_tag + friend class WritingIterator; + class WritingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -78,15 +78,15 @@ class basic_nsAWritableString private: friend class basic_nsAWritableString; - Fragment mFragment; - CharT* mPosition; + WritableFragment mFragment; + CharT* mPosition; basic_nsAWritableString* mOwningString; void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -94,11 +94,11 @@ class basic_nsAWritableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - Iterator( Fragment& aFragment, + WritingIterator( WritableFragment& aFragment, CharT* aStartingPosition, basic_nsAWritableString& aOwningString ) : mFragment(aFragment), @@ -109,8 +109,8 @@ class basic_nsAWritableString } public: - // Iterator( const Iterator& ); ...use default copy-constructor - // Iterator& operator=( const Iterator& ); ...use default copy-assignment operator + // WritingIterator( const WritingIterator& ); ...use default copy-constructor + // WritingIterator& operator=( const WritingIterator& ); ...use default copy-assignment operator reference @@ -125,7 +125,7 @@ class basic_nsAWritableString return mPosition; } - Iterator& + WritingIterator& operator++() { ++mPosition; @@ -133,16 +133,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator++( int ) { - Iterator result(*this); + WritingIterator result(*this); ++mPosition; normalize_forward(); return result; } - Iterator& + WritingIterator& operator--() { normalize_backward(); @@ -150,16 +150,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator--( int ) { - Iterator result(*this); + WritingIterator result(*this); normalize_backward(); --mPosition; return result; } - const Fragment& + const WritableFragment& fragment() const { return mFragment; @@ -177,7 +177,7 @@ class basic_nsAWritableString return mPosition - mFragment.mStart; } - Iterator& + WritingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -185,7 +185,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -194,7 +194,7 @@ class basic_nsAWritableString return *this; } - Iterator& + WritingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -202,7 +202,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -212,52 +212,37 @@ class basic_nsAWritableString } PRBool - operator==( const Iterator& rhs ) const + operator==( const WritingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const Iterator& rhs ) const + operator!=( const WritingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef WritingIterator Iterator; + public: -#ifdef HAVE_CPP_USING - using basic_nsAReadableString::Begin; - using basic_nsAReadableString::End; -#else - basic_nsAReadableString::ConstIterator - Begin( PRUint32 aOffset = 0 ) const + WritingIterator + BeginWriting( PRUint32 aOffset = 0 ) { - return basic_nsAReadableString::Begin(aOffset); - } - - basic_nsAReadableString::ConstIterator - End( PRUint32 aOffset = 0 ) const - { - return basic_nsAReadableString::End(aOffset); - } -#endif - - Iterator - Begin( PRUint32 aOffset = 0 ) - { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, aOffset); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, aOffset); + return WritingIterator(fragment, startPos, *this); } - Iterator - End( PRUint32 aOffset = 0 ) + WritingIterator + EndWriting( PRUint32 aOffset = 0 ) { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return WritingIterator(fragment, startPos, *this); } @@ -339,20 +324,20 @@ class basic_nsAWritableString NS_DEF_STRING_COMPARISONS(basic_nsAWritableString) template -typename basic_nsAWritableString::Iterator -copy_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_forward(), result.size_forward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_forward(), result.size_forward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); // assert(lengthToCopy > 0); - std::char_traits::copy(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::copy(result.operator->(), first.operator->(), lengthToCopy); first += PRInt32(lengthToCopy); result += PRInt32(lengthToCopy); @@ -362,18 +347,18 @@ copy_chunky( typename basic_nsAReadableString::ConstIterator first, } template -typename basic_nsAWritableString::Iterator -copy_backward_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_backward_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_backward(), result.size_backward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_backward(), result.size_backward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); - std::char_traits::move(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::move(result.operator->(), first.operator->(), lengthToCopy); first -= PRInt32(lengthToCopy); result -= PRInt32(lengthToCopy); @@ -390,7 +375,7 @@ void basic_nsAWritableString::Assign( const basic_nsAReadableString& rhs ) { SetLength(rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin()); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting()); } template @@ -399,7 +384,7 @@ basic_nsAWritableString::Append( const basic_nsAReadableString& rh { PRUint32 oldLength = Length(); SetLength(oldLength + rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin(oldLength)); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength)); } template @@ -407,31 +392,27 @@ void basic_nsAWritableString::AppendChar( CharT aChar ) { SetLength(Length()+1); - *End(1) = aChar; + *EndWriting(1) = aChar; } template void basic_nsAWritableString::Insert( const basic_nsAReadableString& aReadable, PRUint32 aPosition ) { - typedef typename basic_nsAReadableString readable_t; - PRUint32 oldLength = Length(); SetLength(oldLength + aReadable.Length()); if ( aPosition < oldLength ) - copy_backward_chunky(readable_t::Begin(aPosition), readable_t::Begin(oldLength), End()); + copy_backward_chunky(BeginReading(aPosition), BeginReading(oldLength), EndWriting()); else aPosition = oldLength; - copy_chunky(aReadable.Begin(), aReadable.End(), Begin(aPosition)); + copy_chunky(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(aPosition)); } template void basic_nsAWritableString::Cut( PRUint32 cutStart, PRUint32 cutLength ) { - typedef typename basic_nsAReadableString readable_t; - - copy_chunky(readable_t::Begin(cutStart+cutLength), readable_t::End(), Begin(cutStart)); + copy_chunky(BeginReading(cutStart+cutLength), EndReading(), BeginWriting(cutStart)); SetLength(Length()-cutLength); } @@ -450,21 +431,19 @@ basic_nsAWritableString::Replace( PRUint32 cutStart, PRUint32 cutLength, PRUint32 newLength = oldLength - cutLength + replacementLength; - typedef typename basic_nsAReadableString readable_t; - if ( cutLength > replacementLength ) - copy_chunky(readable_t::Begin(cutEnd), readable_t::End(), Begin(replacementEnd)); + copy_chunky(BeginReading(cutEnd), EndReading(), BeginWriting(replacementEnd)); SetLength(newLength); if ( cutLength < replacementLength ) - copy_backward_chunky(readable_t::Begin(cutEnd), readable_t::Begin(oldLength), Begin(replacementEnd)); + copy_backward_chunky(BeginReading(cutEnd), BeginReading(oldLength), BeginWriting(replacementEnd)); - copy_chunky(aReplacement.Begin(), aReplacement.End(), Begin(cutStart)); + copy_chunky(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart)); } // operator>> // getline (maybe) -typedef basic_nsAWritableString nsAWritableString; -typedef basic_nsAWritableString nsAWritableCString; +typedef basic_nsAWritableString nsAWritableString; +typedef basic_nsAWritableString nsAWritableCString; #endif // !defined(_nsAWritableString_h__) diff --git a/mozilla/xpcom/ds/nsAReadableString.h b/mozilla/xpcom/ds/nsAReadableString.h index 2e3eeed9404..3b8209e4bbd 100644 --- a/mozilla/xpcom/ds/nsAReadableString.h +++ b/mozilla/xpcom/ds/nsAReadableString.h @@ -26,15 +26,20 @@ // WORK IN PROGRESS +#ifndef nscore_h___ #include "nscore.h" // for |PRUnichar| +#endif -#include - // for |char_traits| +#ifndef _nsCharTraits_h__ +#include "nsCharTraits.h" +#endif #include // for |bidirectional_iterator_tag| +#include + /* This file defines the abstract interfaces |nsAReadableString| and @@ -77,13 +82,13 @@ class basic_nsAReadableString { protected: - struct ConstFragment + struct ReadableFragment { const CharT* mStart; const CharT* mEnd; PRUint32 mFragmentIdentifier; - ConstFragment() + ReadableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -96,12 +101,12 @@ class basic_nsAReadableString enum FragmentRequest { kPrevFragment, kFirstFragment, kLastFragment, kNextFragment, kFragmentAt }; - // Damn! Had to make |GetConstFragment| public because the compilers suck. Should be protected. - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; + // Damn! Had to make |GetReadableFragment| public because the compilers suck. Should be protected. + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; - friend class ConstIterator; - class ConstIterator - : public std::bidirectional_iterator_tag + friend class ReadingIterator; + class ReadingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -113,15 +118,16 @@ class basic_nsAReadableString private: friend class basic_nsAReadableString; - ConstFragment mFragment; - const CharT* mPosition; + ReadableFragment mFragment; + const CharT* mPosition; const basic_nsAReadableString* mOwningString; + void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetConstFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -129,13 +135,13 @@ class basic_nsAReadableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetConstFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - ConstIterator( const ConstFragment& aFragment, - const CharT* aStartingPosition, - const basic_nsAReadableString& aOwningString ) + ReadingIterator( const ReadableFragment& aFragment, + const CharT* aStartingPosition, + const basic_nsAReadableString& aOwningString ) : mFragment(aFragment), mPosition(aStartingPosition), mOwningString(&aOwningString) @@ -144,8 +150,8 @@ class basic_nsAReadableString } public: - // ConstIterator( const ConstIterator& ); ...use default copy-constructor - // ConstIterator& operator=( const ConstIterator& ); ...use default copy-assignment operator + // ReadingIterator( const ReadingIterator& ); ...use default copy-constructor + // ReadingIterator& operator=( const ReadingIterator& ); ...use default copy-assignment operator CharT @@ -160,7 +166,7 @@ class basic_nsAReadableString return mPosition; } - ConstIterator& + ReadingIterator& operator++() { ++mPosition; @@ -168,16 +174,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator++( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); ++mPosition; normalize_forward(); return result; } - ConstIterator& + ReadingIterator& operator--() { normalize_backward(); @@ -185,16 +191,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator--( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); normalize_backward(); --mPosition; return result; } - const ConstFragment& + const ReadableFragment& fragment() const { return mFragment; @@ -212,7 +218,7 @@ class basic_nsAReadableString return mPosition - mFragment.mStart; } - ConstIterator& + ReadingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -220,7 +226,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -229,7 +235,7 @@ class basic_nsAReadableString return *this; } - ConstIterator& + ReadingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -237,7 +243,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -250,39 +256,41 @@ class basic_nsAReadableString // Damn again! Problems with templates made me implement comparisons as members. PRBool - operator==( const ConstIterator& rhs ) const + operator==( const ReadingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const ConstIterator& rhs ) const + operator!=( const ReadingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef ReadingIterator ConstIterator; + public: - ConstIterator - Begin( PRUint32 aOffset = 0 ) const + ReadingIterator + BeginReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, aOffset); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, aOffset); + return ReadingIterator(fragment, startPos, *this); } - ConstIterator - End( PRUint32 aOffset = 0 ) const + ReadingIterator + EndReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return ReadingIterator(fragment, startPos, *this); } public: - virtual ~basic_nsAReadableString() { } + virtual ~basic_nsAReadableString() { } // ...yes, I expect to be sub-classed. virtual PRUint32 Length() const = 0; @@ -445,8 +453,8 @@ const char* basic_nsAReadableString::GetBuffer() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -456,8 +464,8 @@ const PRUnichar* basic_nsAReadableString::GetUnicode() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -472,7 +480,7 @@ basic_nsAReadableString::Implementation() const /* Note: the following four functions, |CharAt|, |operator[]|, |First|, and |Last|, are implemented - in the simplest reasonable scheme; by calling |GetConstFragment| and resolving the pointer it + in the simplest reasonable scheme; by calling |GetReadableFragment| and resolving the pointer it returns. The alternative is to force at least one of these methods to be |virtual|. The ideal candidate for that change would be |CharAt|. @@ -488,8 +496,8 @@ CharT basic_nsAReadableString::CharAt( PRUint32 aIndex ) const { // ??? Is |CharAt()| supposed to be the 'safe' version? - ConstFragment fragment; - return *GetConstFragment(fragment, kFragmentAt, aIndex); + ReadableFragment fragment; + return *GetReadableFragment(fragment, kFragmentAt, aIndex); } template @@ -521,12 +529,12 @@ PRUint32 basic_nsAReadableString::CountChar( CharT c ) const { #if 1 - return PRUint32(count(Begin(), End(), c)); + return PRUint32(count(BeginReading(), EndReading(), c)); #else PRUint32 result = 0; PRUint32 lengthToExamine = Length(); - ConstIterator iter( Begin() ); + ReadingIterator iter( BeginReading() ); for (;;) { PRUint32 lengthToExamineInThisFragment = iter.size_forward(); @@ -567,7 +575,7 @@ PRUint32 basic_nsAReadableString::Right( basic_nsAWritableString& aResult, PRUint32 aLengthToCopy ) const { PRUint32 myLength = Length(); - aLengthToCopy = std::min(myLength, aLengthToCopy); + aLengthToCopy = min(myLength, aLengthToCopy); aResult = Substring(*this, myLength-aLengthToCopy, aLengthToCopy); return aResult.Length(); } @@ -621,17 +629,17 @@ class basic_nsLiteralString */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: // Note: _not_ explicit basic_nsLiteralString( const CharT* aLiteral ) : mStart(aLiteral), - mEnd(mStart + char_traits::length(mStart)) + mEnd(mStart + nsCharTraits::length(mStart)) { // nothing else to do here } @@ -654,7 +662,7 @@ NS_DEF_STRING_COMPARISONS(basic_nsLiteralString) template const CharT* -basic_nsLiteralString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const +basic_nsLiteralString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -697,7 +705,7 @@ class nsPromiseConcatenation Instances of this class only exist as anonymous temporary results from |operator+()|. This is the machinery that makes string concatenation efficient. No allocations or character copies are required unless and until a final assignment is made. It works - its magic by overriding and forwarding calls to |GetConstFragment()|. + its magic by overriding and forwarding calls to |GetReadableFragment()|. Note: |nsPromiseConcatenation| imposes some limits on string concatenation with |operator+()|. - no more than 33 strings, e.g., |s1 + s2 + s3 + ... s32 + s33| @@ -708,32 +716,32 @@ class nsPromiseConcatenation for a user to need to control it. Too many strings summed together can easily be worked around with an intermediate assignment. I wouldn't have the parentheses limitation if I assigned the identifier mask starting at the top, the first time anybody called - |GetConstFragment()|. + |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; enum { kLeftString, kRightString }; int - GetCurrentStringFromFragment( const ConstFragment& aFragment ) const + GetCurrentStringFromFragment( const ReadableFragment& aFragment ) const { return (aFragment.mFragmentIdentifier & mFragmentIdentifierMask) ? kRightString : kLeftString; } int - SetLeftStringInFragment( ConstFragment& aFragment ) const + SetLeftStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier &= ~mFragmentIdentifierMask; return kLeftString; } int - SetRightStringInFragment( ConstFragment& aFragment ) const + SetRightStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier |= mFragmentIdentifierMask; return kRightString; @@ -772,14 +780,14 @@ nsPromiseConcatenation::Length() const template const CharT* -nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseConcatenation::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { const int kLeftString = 0; const int kRightString = 1; int whichString; - // based on the request, pick which string we will forward the |GetConstFragment()| call into + // based on the request, pick which string we will forward the |GetReadableFragment()| call into switch ( aRequest ) { @@ -814,7 +822,7 @@ nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, Fragm do { done = true; - result = mStrings[whichString]->GetConstFragment(aFragment, aRequest, aPosition); + result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition); if ( !result ) { @@ -862,20 +870,20 @@ class nsPromiseSubstring ...not unlike |nsPromiseConcatenation|. Instances of this class exist only as anonymous temporary results from |Substring()|. Like |nsPromiseConcatenation|, this class only holds a pointer, no string data of its own. It does its magic by overriding and forwarding - calls to |GetConstFragment()|. + calls to |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: nsPromiseSubstring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), - mStartPos( std::min(aStartPos, aString.Length()) ), - mLength( std::min(aLength, aString.Length()-mStartPos) ) + mStartPos( min(aStartPos, aString.Length()) ), + mLength( min(aLength, aString.Length()-mStartPos) ) { // nothing else to do here } @@ -899,7 +907,7 @@ nsPromiseSubstring::Length() const template const CharT* -nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseSubstring::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -917,7 +925,7 @@ nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentR else if ( aRequest == kFragmentAt ) aPosition += mStartPos; - return mString.GetConstFragment(aFragment, aRequest, aPosition); + return mString.GetReadableFragment(aFragment, aRequest, aPosition); } @@ -945,20 +953,20 @@ Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableStrin PRUint32 lLength = lhs.Length(); PRUint32 rLength = rhs.Length(); - PRUint32 lengthToCompare = std::min(lLength, rLength); + PRUint32 lengthToCompare = min(lLength, rLength); - basic_nsAReadableString::ConstIterator leftIter( lhs.Begin() ); - basic_nsAReadableString::ConstIterator rightIter( rhs.Begin() ); + basic_nsAReadableString::ReadingIterator leftIter( lhs.BeginReading() ); + basic_nsAReadableString::ReadingIterator rightIter( rhs.BeginReading() ); for (;;) { - PRUint32 lengthAvailable = PRUint32( std::min(leftIter.size_forward(), rightIter.size_forward()) ); + PRUint32 lengthAvailable = PRUint32( min(leftIter.size_forward(), rightIter.size_forward()) ); // assert( lengthAvailable >= 0 ); if ( lengthAvailable > lengthToCompare ) lengthAvailable = lengthToCompare; - if ( int result = std::char_traits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) + if ( int result = nsCharTraits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) return result; if ( !(lengthToCompare -= lengthAvailable) ) @@ -1046,10 +1054,10 @@ operator+( const basic_nsLiteralString& lhs, const basic_nsLiteralString< #ifdef SCC_TESTS template -std::basic_ostream& +basic_ostream& operator<<( basic_ostream& os, const basic_nsAReadableString& s ) { - std::copy(s.Begin(), s.End(), ostream_iterator(os)); + copy(s.BeginReading(), s.EndReading(), ostream_iterator(os)); return os; } #endif diff --git a/mozilla/xpcom/ds/nsAWritableString.h b/mozilla/xpcom/ds/nsAWritableString.h index eb0f646dfa4..cab014fb615 100644 --- a/mozilla/xpcom/ds/nsAWritableString.h +++ b/mozilla/xpcom/ds/nsAWritableString.h @@ -48,13 +48,13 @@ class basic_nsAWritableString protected: typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - struct Fragment + struct WritableFragment { CharT* mStart; CharT* mEnd; PRUint32 mFragmentIdentifier; - Fragment() + WritableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -62,11 +62,11 @@ class basic_nsAWritableString }; public: - virtual CharT* GetFragment( Fragment&, FragmentRequest, PRUint32 = 0 ) = 0; + virtual CharT* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 = 0 ) = 0; - friend class Iterator; - class Iterator - : public std::bidirectional_iterator_tag + friend class WritingIterator; + class WritingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -78,15 +78,15 @@ class basic_nsAWritableString private: friend class basic_nsAWritableString; - Fragment mFragment; - CharT* mPosition; + WritableFragment mFragment; + CharT* mPosition; basic_nsAWritableString* mOwningString; void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -94,11 +94,11 @@ class basic_nsAWritableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - Iterator( Fragment& aFragment, + WritingIterator( WritableFragment& aFragment, CharT* aStartingPosition, basic_nsAWritableString& aOwningString ) : mFragment(aFragment), @@ -109,8 +109,8 @@ class basic_nsAWritableString } public: - // Iterator( const Iterator& ); ...use default copy-constructor - // Iterator& operator=( const Iterator& ); ...use default copy-assignment operator + // WritingIterator( const WritingIterator& ); ...use default copy-constructor + // WritingIterator& operator=( const WritingIterator& ); ...use default copy-assignment operator reference @@ -125,7 +125,7 @@ class basic_nsAWritableString return mPosition; } - Iterator& + WritingIterator& operator++() { ++mPosition; @@ -133,16 +133,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator++( int ) { - Iterator result(*this); + WritingIterator result(*this); ++mPosition; normalize_forward(); return result; } - Iterator& + WritingIterator& operator--() { normalize_backward(); @@ -150,16 +150,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator--( int ) { - Iterator result(*this); + WritingIterator result(*this); normalize_backward(); --mPosition; return result; } - const Fragment& + const WritableFragment& fragment() const { return mFragment; @@ -177,7 +177,7 @@ class basic_nsAWritableString return mPosition - mFragment.mStart; } - Iterator& + WritingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -185,7 +185,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -194,7 +194,7 @@ class basic_nsAWritableString return *this; } - Iterator& + WritingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -202,7 +202,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -212,52 +212,37 @@ class basic_nsAWritableString } PRBool - operator==( const Iterator& rhs ) const + operator==( const WritingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const Iterator& rhs ) const + operator!=( const WritingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef WritingIterator Iterator; + public: -#ifdef HAVE_CPP_USING - using basic_nsAReadableString::Begin; - using basic_nsAReadableString::End; -#else - basic_nsAReadableString::ConstIterator - Begin( PRUint32 aOffset = 0 ) const + WritingIterator + BeginWriting( PRUint32 aOffset = 0 ) { - return basic_nsAReadableString::Begin(aOffset); - } - - basic_nsAReadableString::ConstIterator - End( PRUint32 aOffset = 0 ) const - { - return basic_nsAReadableString::End(aOffset); - } -#endif - - Iterator - Begin( PRUint32 aOffset = 0 ) - { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, aOffset); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, aOffset); + return WritingIterator(fragment, startPos, *this); } - Iterator - End( PRUint32 aOffset = 0 ) + WritingIterator + EndWriting( PRUint32 aOffset = 0 ) { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return WritingIterator(fragment, startPos, *this); } @@ -339,20 +324,20 @@ class basic_nsAWritableString NS_DEF_STRING_COMPARISONS(basic_nsAWritableString) template -typename basic_nsAWritableString::Iterator -copy_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_forward(), result.size_forward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_forward(), result.size_forward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); // assert(lengthToCopy > 0); - std::char_traits::copy(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::copy(result.operator->(), first.operator->(), lengthToCopy); first += PRInt32(lengthToCopy); result += PRInt32(lengthToCopy); @@ -362,18 +347,18 @@ copy_chunky( typename basic_nsAReadableString::ConstIterator first, } template -typename basic_nsAWritableString::Iterator -copy_backward_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_backward_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_backward(), result.size_backward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_backward(), result.size_backward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); - std::char_traits::move(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::move(result.operator->(), first.operator->(), lengthToCopy); first -= PRInt32(lengthToCopy); result -= PRInt32(lengthToCopy); @@ -390,7 +375,7 @@ void basic_nsAWritableString::Assign( const basic_nsAReadableString& rhs ) { SetLength(rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin()); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting()); } template @@ -399,7 +384,7 @@ basic_nsAWritableString::Append( const basic_nsAReadableString& rh { PRUint32 oldLength = Length(); SetLength(oldLength + rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin(oldLength)); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength)); } template @@ -407,31 +392,27 @@ void basic_nsAWritableString::AppendChar( CharT aChar ) { SetLength(Length()+1); - *End(1) = aChar; + *EndWriting(1) = aChar; } template void basic_nsAWritableString::Insert( const basic_nsAReadableString& aReadable, PRUint32 aPosition ) { - typedef typename basic_nsAReadableString readable_t; - PRUint32 oldLength = Length(); SetLength(oldLength + aReadable.Length()); if ( aPosition < oldLength ) - copy_backward_chunky(readable_t::Begin(aPosition), readable_t::Begin(oldLength), End()); + copy_backward_chunky(BeginReading(aPosition), BeginReading(oldLength), EndWriting()); else aPosition = oldLength; - copy_chunky(aReadable.Begin(), aReadable.End(), Begin(aPosition)); + copy_chunky(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(aPosition)); } template void basic_nsAWritableString::Cut( PRUint32 cutStart, PRUint32 cutLength ) { - typedef typename basic_nsAReadableString readable_t; - - copy_chunky(readable_t::Begin(cutStart+cutLength), readable_t::End(), Begin(cutStart)); + copy_chunky(BeginReading(cutStart+cutLength), EndReading(), BeginWriting(cutStart)); SetLength(Length()-cutLength); } @@ -450,21 +431,19 @@ basic_nsAWritableString::Replace( PRUint32 cutStart, PRUint32 cutLength, PRUint32 newLength = oldLength - cutLength + replacementLength; - typedef typename basic_nsAReadableString readable_t; - if ( cutLength > replacementLength ) - copy_chunky(readable_t::Begin(cutEnd), readable_t::End(), Begin(replacementEnd)); + copy_chunky(BeginReading(cutEnd), EndReading(), BeginWriting(replacementEnd)); SetLength(newLength); if ( cutLength < replacementLength ) - copy_backward_chunky(readable_t::Begin(cutEnd), readable_t::Begin(oldLength), Begin(replacementEnd)); + copy_backward_chunky(BeginReading(cutEnd), BeginReading(oldLength), BeginWriting(replacementEnd)); - copy_chunky(aReplacement.Begin(), aReplacement.End(), Begin(cutStart)); + copy_chunky(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart)); } // operator>> // getline (maybe) -typedef basic_nsAWritableString nsAWritableString; -typedef basic_nsAWritableString nsAWritableCString; +typedef basic_nsAWritableString nsAWritableString; +typedef basic_nsAWritableString nsAWritableCString; #endif // !defined(_nsAWritableString_h__) diff --git a/mozilla/xpcom/ds/nsString.cpp b/mozilla/xpcom/ds/nsString.cpp index 847dccf1ab3..37be74d2a6c 100644 --- a/mozilla/xpcom/ds/nsString.cpp +++ b/mozilla/xpcom/ds/nsString.cpp @@ -126,7 +126,7 @@ nsCString::~nsCString() { } #ifdef NEW_STRING_APIS -const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const char* nsCString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -141,7 +141,7 @@ const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentReque } } -char* nsCString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +char* nsCString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/xpcom/ds/nsString.h b/mozilla/xpcom/ds/nsString.h index 07da8428487..449423952f7 100644 --- a/mozilla/xpcom/ds/nsString.h +++ b/mozilla/xpcom/ds/nsString.h @@ -60,12 +60,12 @@ class NS_COM nsCString : #ifdef NEW_STRING_APIS protected: - typedef nsAReadableCString::FragmentRequest FragmentRequest; - typedef nsAReadableCString::ConstFragment ConstFragment; - typedef nsAWritableCString::Fragment Fragment; + typedef nsAReadableCString::FragmentRequest FragmentRequest; + typedef nsAReadableCString::ReadableFragment ReadableFragment; + typedef nsAWritableCString::WritableFragment WritableFragment; - virtual const char* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual char* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const char* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual char* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsCString( const nsAReadableCString& ); diff --git a/mozilla/xpcom/ds/nsString2.cpp b/mozilla/xpcom/ds/nsString2.cpp index 8c404d72f36..c552636972f 100644 --- a/mozilla/xpcom/ds/nsString2.cpp +++ b/mozilla/xpcom/ds/nsString2.cpp @@ -137,7 +137,7 @@ nsString::~nsString() { } #ifdef NEW_STRING_APIS -const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const PRUnichar* nsString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -152,7 +152,7 @@ const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentR } } -PRUnichar* nsString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +PRUnichar* nsString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/xpcom/ds/nsString2.h b/mozilla/xpcom/ds/nsString2.h index 0e51afe765c..9394ed50383 100644 --- a/mozilla/xpcom/ds/nsString2.h +++ b/mozilla/xpcom/ds/nsString2.h @@ -68,11 +68,11 @@ class NS_COM nsString : #ifdef NEW_STRING_APIS protected: typedef nsAReadableString::FragmentRequest FragmentRequest; - typedef nsAReadableString::ConstFragment ConstFragment; - typedef nsAWritableString::Fragment Fragment; + typedef nsAReadableString::ReadableFragment ReadableFragment; + typedef nsAWritableString::WritableFragment WritableFragment; - virtual const PRUnichar* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const PRUnichar* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual PRUnichar* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsString( const nsAReadableString& ); diff --git a/mozilla/xpcom/string/obsolete/nsString.cpp b/mozilla/xpcom/string/obsolete/nsString.cpp index 847dccf1ab3..37be74d2a6c 100644 --- a/mozilla/xpcom/string/obsolete/nsString.cpp +++ b/mozilla/xpcom/string/obsolete/nsString.cpp @@ -126,7 +126,7 @@ nsCString::~nsCString() { } #ifdef NEW_STRING_APIS -const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const char* nsCString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -141,7 +141,7 @@ const char* nsCString::GetConstFragment( ConstFragment& aFragment, FragmentReque } } -char* nsCString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +char* nsCString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/xpcom/string/obsolete/nsString.h b/mozilla/xpcom/string/obsolete/nsString.h index 07da8428487..449423952f7 100644 --- a/mozilla/xpcom/string/obsolete/nsString.h +++ b/mozilla/xpcom/string/obsolete/nsString.h @@ -60,12 +60,12 @@ class NS_COM nsCString : #ifdef NEW_STRING_APIS protected: - typedef nsAReadableCString::FragmentRequest FragmentRequest; - typedef nsAReadableCString::ConstFragment ConstFragment; - typedef nsAWritableCString::Fragment Fragment; + typedef nsAReadableCString::FragmentRequest FragmentRequest; + typedef nsAReadableCString::ReadableFragment ReadableFragment; + typedef nsAWritableCString::WritableFragment WritableFragment; - virtual const char* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual char* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const char* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual char* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsCString( const nsAReadableCString& ); diff --git a/mozilla/xpcom/string/obsolete/nsString2.cpp b/mozilla/xpcom/string/obsolete/nsString2.cpp index 8c404d72f36..c552636972f 100644 --- a/mozilla/xpcom/string/obsolete/nsString2.cpp +++ b/mozilla/xpcom/string/obsolete/nsString2.cpp @@ -137,7 +137,7 @@ nsString::~nsString() { } #ifdef NEW_STRING_APIS -const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { +const PRUnichar* nsString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { case kFirstFragment: case kLastFragment: @@ -152,7 +152,7 @@ const PRUnichar* nsString::GetConstFragment( ConstFragment& aFragment, FragmentR } } -PRUnichar* nsString::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { +PRUnichar* nsString::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { case kFirstFragment: case kLastFragment: diff --git a/mozilla/xpcom/string/obsolete/nsString2.h b/mozilla/xpcom/string/obsolete/nsString2.h index 0e51afe765c..9394ed50383 100644 --- a/mozilla/xpcom/string/obsolete/nsString2.h +++ b/mozilla/xpcom/string/obsolete/nsString2.h @@ -68,11 +68,11 @@ class NS_COM nsString : #ifdef NEW_STRING_APIS protected: typedef nsAReadableString::FragmentRequest FragmentRequest; - typedef nsAReadableString::ConstFragment ConstFragment; - typedef nsAWritableString::Fragment Fragment; + typedef nsAReadableString::ReadableFragment ReadableFragment; + typedef nsAWritableString::WritableFragment WritableFragment; - virtual const PRUnichar* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const PRUnichar* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual PRUnichar* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: nsString( const nsAReadableString& ); diff --git a/mozilla/xpcom/string/public/nsAReadableString.h b/mozilla/xpcom/string/public/nsAReadableString.h index 2e3eeed9404..3b8209e4bbd 100644 --- a/mozilla/xpcom/string/public/nsAReadableString.h +++ b/mozilla/xpcom/string/public/nsAReadableString.h @@ -26,15 +26,20 @@ // WORK IN PROGRESS +#ifndef nscore_h___ #include "nscore.h" // for |PRUnichar| +#endif -#include - // for |char_traits| +#ifndef _nsCharTraits_h__ +#include "nsCharTraits.h" +#endif #include // for |bidirectional_iterator_tag| +#include + /* This file defines the abstract interfaces |nsAReadableString| and @@ -77,13 +82,13 @@ class basic_nsAReadableString { protected: - struct ConstFragment + struct ReadableFragment { const CharT* mStart; const CharT* mEnd; PRUint32 mFragmentIdentifier; - ConstFragment() + ReadableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -96,12 +101,12 @@ class basic_nsAReadableString enum FragmentRequest { kPrevFragment, kFirstFragment, kLastFragment, kNextFragment, kFragmentAt }; - // Damn! Had to make |GetConstFragment| public because the compilers suck. Should be protected. - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; + // Damn! Had to make |GetReadableFragment| public because the compilers suck. Should be protected. + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 = 0 ) const = 0; - friend class ConstIterator; - class ConstIterator - : public std::bidirectional_iterator_tag + friend class ReadingIterator; + class ReadingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -113,15 +118,16 @@ class basic_nsAReadableString private: friend class basic_nsAReadableString; - ConstFragment mFragment; - const CharT* mPosition; + ReadableFragment mFragment; + const CharT* mPosition; const basic_nsAReadableString* mOwningString; + void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetConstFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -129,13 +135,13 @@ class basic_nsAReadableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetConstFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetReadableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - ConstIterator( const ConstFragment& aFragment, - const CharT* aStartingPosition, - const basic_nsAReadableString& aOwningString ) + ReadingIterator( const ReadableFragment& aFragment, + const CharT* aStartingPosition, + const basic_nsAReadableString& aOwningString ) : mFragment(aFragment), mPosition(aStartingPosition), mOwningString(&aOwningString) @@ -144,8 +150,8 @@ class basic_nsAReadableString } public: - // ConstIterator( const ConstIterator& ); ...use default copy-constructor - // ConstIterator& operator=( const ConstIterator& ); ...use default copy-assignment operator + // ReadingIterator( const ReadingIterator& ); ...use default copy-constructor + // ReadingIterator& operator=( const ReadingIterator& ); ...use default copy-assignment operator CharT @@ -160,7 +166,7 @@ class basic_nsAReadableString return mPosition; } - ConstIterator& + ReadingIterator& operator++() { ++mPosition; @@ -168,16 +174,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator++( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); ++mPosition; normalize_forward(); return result; } - ConstIterator& + ReadingIterator& operator--() { normalize_backward(); @@ -185,16 +191,16 @@ class basic_nsAReadableString return *this; } - ConstIterator + ReadingIterator operator--( int ) { - ConstIterator result(*this); + ReadingIterator result(*this); normalize_backward(); --mPosition; return result; } - const ConstFragment& + const ReadableFragment& fragment() const { return mFragment; @@ -212,7 +218,7 @@ class basic_nsAReadableString return mPosition - mFragment.mStart; } - ConstIterator& + ReadingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -220,7 +226,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -229,7 +235,7 @@ class basic_nsAReadableString return *this; } - ConstIterator& + ReadingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -237,7 +243,7 @@ class basic_nsAReadableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -250,39 +256,41 @@ class basic_nsAReadableString // Damn again! Problems with templates made me implement comparisons as members. PRBool - operator==( const ConstIterator& rhs ) const + operator==( const ReadingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const ConstIterator& rhs ) const + operator!=( const ReadingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef ReadingIterator ConstIterator; + public: - ConstIterator - Begin( PRUint32 aOffset = 0 ) const + ReadingIterator + BeginReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, aOffset); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, aOffset); + return ReadingIterator(fragment, startPos, *this); } - ConstIterator - End( PRUint32 aOffset = 0 ) const + ReadingIterator + EndReading( PRUint32 aOffset = 0 ) const { - ConstFragment fragment; - const CharT* startPos = GetConstFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return ConstIterator(fragment, startPos, *this); + ReadableFragment fragment; + const CharT* startPos = GetReadableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return ReadingIterator(fragment, startPos, *this); } public: - virtual ~basic_nsAReadableString() { } + virtual ~basic_nsAReadableString() { } // ...yes, I expect to be sub-classed. virtual PRUint32 Length() const = 0; @@ -445,8 +453,8 @@ const char* basic_nsAReadableString::GetBuffer() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -456,8 +464,8 @@ const PRUnichar* basic_nsAReadableString::GetUnicode() const // DEPRECATED: use the iterators instead { - ConstFragment fragment; - GetConstFragment(fragment, kFirstFragment); + ReadableFragment fragment; + GetReadableFragment(fragment, kFirstFragment); return fragment.mStart; } @@ -472,7 +480,7 @@ basic_nsAReadableString::Implementation() const /* Note: the following four functions, |CharAt|, |operator[]|, |First|, and |Last|, are implemented - in the simplest reasonable scheme; by calling |GetConstFragment| and resolving the pointer it + in the simplest reasonable scheme; by calling |GetReadableFragment| and resolving the pointer it returns. The alternative is to force at least one of these methods to be |virtual|. The ideal candidate for that change would be |CharAt|. @@ -488,8 +496,8 @@ CharT basic_nsAReadableString::CharAt( PRUint32 aIndex ) const { // ??? Is |CharAt()| supposed to be the 'safe' version? - ConstFragment fragment; - return *GetConstFragment(fragment, kFragmentAt, aIndex); + ReadableFragment fragment; + return *GetReadableFragment(fragment, kFragmentAt, aIndex); } template @@ -521,12 +529,12 @@ PRUint32 basic_nsAReadableString::CountChar( CharT c ) const { #if 1 - return PRUint32(count(Begin(), End(), c)); + return PRUint32(count(BeginReading(), EndReading(), c)); #else PRUint32 result = 0; PRUint32 lengthToExamine = Length(); - ConstIterator iter( Begin() ); + ReadingIterator iter( BeginReading() ); for (;;) { PRUint32 lengthToExamineInThisFragment = iter.size_forward(); @@ -567,7 +575,7 @@ PRUint32 basic_nsAReadableString::Right( basic_nsAWritableString& aResult, PRUint32 aLengthToCopy ) const { PRUint32 myLength = Length(); - aLengthToCopy = std::min(myLength, aLengthToCopy); + aLengthToCopy = min(myLength, aLengthToCopy); aResult = Substring(*this, myLength-aLengthToCopy, aLengthToCopy); return aResult.Length(); } @@ -621,17 +629,17 @@ class basic_nsLiteralString */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: // Note: _not_ explicit basic_nsLiteralString( const CharT* aLiteral ) : mStart(aLiteral), - mEnd(mStart + char_traits::length(mStart)) + mEnd(mStart + nsCharTraits::length(mStart)) { // nothing else to do here } @@ -654,7 +662,7 @@ NS_DEF_STRING_COMPARISONS(basic_nsLiteralString) template const CharT* -basic_nsLiteralString::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const +basic_nsLiteralString::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -697,7 +705,7 @@ class nsPromiseConcatenation Instances of this class only exist as anonymous temporary results from |operator+()|. This is the machinery that makes string concatenation efficient. No allocations or character copies are required unless and until a final assignment is made. It works - its magic by overriding and forwarding calls to |GetConstFragment()|. + its magic by overriding and forwarding calls to |GetReadableFragment()|. Note: |nsPromiseConcatenation| imposes some limits on string concatenation with |operator+()|. - no more than 33 strings, e.g., |s1 + s2 + s3 + ... s32 + s33| @@ -708,32 +716,32 @@ class nsPromiseConcatenation for a user to need to control it. Too many strings summed together can easily be worked around with an intermediate assignment. I wouldn't have the parentheses limitation if I assigned the identifier mask starting at the top, the first time anybody called - |GetConstFragment()|. + |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; enum { kLeftString, kRightString }; int - GetCurrentStringFromFragment( const ConstFragment& aFragment ) const + GetCurrentStringFromFragment( const ReadableFragment& aFragment ) const { return (aFragment.mFragmentIdentifier & mFragmentIdentifierMask) ? kRightString : kLeftString; } int - SetLeftStringInFragment( ConstFragment& aFragment ) const + SetLeftStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier &= ~mFragmentIdentifierMask; return kLeftString; } int - SetRightStringInFragment( ConstFragment& aFragment ) const + SetRightStringInFragment( ReadableFragment& aFragment ) const { aFragment.mFragmentIdentifier |= mFragmentIdentifierMask; return kRightString; @@ -772,14 +780,14 @@ nsPromiseConcatenation::Length() const template const CharT* -nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseConcatenation::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { const int kLeftString = 0; const int kRightString = 1; int whichString; - // based on the request, pick which string we will forward the |GetConstFragment()| call into + // based on the request, pick which string we will forward the |GetReadableFragment()| call into switch ( aRequest ) { @@ -814,7 +822,7 @@ nsPromiseConcatenation::GetConstFragment( ConstFragment& aFragment, Fragm do { done = true; - result = mStrings[whichString]->GetConstFragment(aFragment, aRequest, aPosition); + result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition); if ( !result ) { @@ -862,20 +870,20 @@ class nsPromiseSubstring ...not unlike |nsPromiseConcatenation|. Instances of this class exist only as anonymous temporary results from |Substring()|. Like |nsPromiseConcatenation|, this class only holds a pointer, no string data of its own. It does its magic by overriding and forwarding - calls to |GetConstFragment()|. + calls to |GetReadableFragment()|. */ { typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; protected: - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; public: nsPromiseSubstring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), - mStartPos( std::min(aStartPos, aString.Length()) ), - mLength( std::min(aLength, aString.Length()-mStartPos) ) + mStartPos( min(aStartPos, aString.Length()) ), + mLength( min(aLength, aString.Length()-mStartPos) ) { // nothing else to do here } @@ -899,7 +907,7 @@ nsPromiseSubstring::Length() const template const CharT* -nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const +nsPromiseSubstring::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -917,7 +925,7 @@ nsPromiseSubstring::GetConstFragment( ConstFragment& aFragment, FragmentR else if ( aRequest == kFragmentAt ) aPosition += mStartPos; - return mString.GetConstFragment(aFragment, aRequest, aPosition); + return mString.GetReadableFragment(aFragment, aRequest, aPosition); } @@ -945,20 +953,20 @@ Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableStrin PRUint32 lLength = lhs.Length(); PRUint32 rLength = rhs.Length(); - PRUint32 lengthToCompare = std::min(lLength, rLength); + PRUint32 lengthToCompare = min(lLength, rLength); - basic_nsAReadableString::ConstIterator leftIter( lhs.Begin() ); - basic_nsAReadableString::ConstIterator rightIter( rhs.Begin() ); + basic_nsAReadableString::ReadingIterator leftIter( lhs.BeginReading() ); + basic_nsAReadableString::ReadingIterator rightIter( rhs.BeginReading() ); for (;;) { - PRUint32 lengthAvailable = PRUint32( std::min(leftIter.size_forward(), rightIter.size_forward()) ); + PRUint32 lengthAvailable = PRUint32( min(leftIter.size_forward(), rightIter.size_forward()) ); // assert( lengthAvailable >= 0 ); if ( lengthAvailable > lengthToCompare ) lengthAvailable = lengthToCompare; - if ( int result = std::char_traits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) + if ( int result = nsCharTraits::compare(leftIter.operator->(), rightIter.operator->(), lengthAvailable) ) return result; if ( !(lengthToCompare -= lengthAvailable) ) @@ -1046,10 +1054,10 @@ operator+( const basic_nsLiteralString& lhs, const basic_nsLiteralString< #ifdef SCC_TESTS template -std::basic_ostream& +basic_ostream& operator<<( basic_ostream& os, const basic_nsAReadableString& s ) { - std::copy(s.Begin(), s.End(), ostream_iterator(os)); + copy(s.BeginReading(), s.EndReading(), ostream_iterator(os)); return os; } #endif diff --git a/mozilla/xpcom/string/public/nsAWritableString.h b/mozilla/xpcom/string/public/nsAWritableString.h index eb0f646dfa4..cab014fb615 100644 --- a/mozilla/xpcom/string/public/nsAWritableString.h +++ b/mozilla/xpcom/string/public/nsAWritableString.h @@ -48,13 +48,13 @@ class basic_nsAWritableString protected: typedef typename basic_nsAReadableString::FragmentRequest FragmentRequest; - struct Fragment + struct WritableFragment { CharT* mStart; CharT* mEnd; PRUint32 mFragmentIdentifier; - Fragment() + WritableFragment() : mStart(0), mEnd(0), mFragmentIdentifier(0) { // nothing else to do here @@ -62,11 +62,11 @@ class basic_nsAWritableString }; public: - virtual CharT* GetFragment( Fragment&, FragmentRequest, PRUint32 = 0 ) = 0; + virtual CharT* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 = 0 ) = 0; - friend class Iterator; - class Iterator - : public std::bidirectional_iterator_tag + friend class WritingIterator; + class WritingIterator + : public bidirectional_iterator_tag { public: typedef ptrdiff_t difference_type; @@ -78,15 +78,15 @@ class basic_nsAWritableString private: friend class basic_nsAWritableString; - Fragment mFragment; - CharT* mPosition; + WritableFragment mFragment; + CharT* mPosition; basic_nsAWritableString* mOwningString; void normalize_forward() { if ( mPosition == mFragment.mEnd ) - if ( mOwningString->GetFragment(mFragment, kNextFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kNextFragment) ) mPosition = mFragment.mStart; } @@ -94,11 +94,11 @@ class basic_nsAWritableString normalize_backward() { if ( mPosition == mFragment.mStart ) - if ( mOwningString->GetFragment(mFragment, kPrevFragment) ) + if ( mOwningString->GetWritableFragment(mFragment, kPrevFragment) ) mPosition = mFragment.mEnd; } - Iterator( Fragment& aFragment, + WritingIterator( WritableFragment& aFragment, CharT* aStartingPosition, basic_nsAWritableString& aOwningString ) : mFragment(aFragment), @@ -109,8 +109,8 @@ class basic_nsAWritableString } public: - // Iterator( const Iterator& ); ...use default copy-constructor - // Iterator& operator=( const Iterator& ); ...use default copy-assignment operator + // WritingIterator( const WritingIterator& ); ...use default copy-constructor + // WritingIterator& operator=( const WritingIterator& ); ...use default copy-assignment operator reference @@ -125,7 +125,7 @@ class basic_nsAWritableString return mPosition; } - Iterator& + WritingIterator& operator++() { ++mPosition; @@ -133,16 +133,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator++( int ) { - Iterator result(*this); + WritingIterator result(*this); ++mPosition; normalize_forward(); return result; } - Iterator& + WritingIterator& operator--() { normalize_backward(); @@ -150,16 +150,16 @@ class basic_nsAWritableString return *this; } - Iterator + WritingIterator operator--( int ) { - Iterator result(*this); + WritingIterator result(*this); normalize_backward(); --mPosition; return result; } - const Fragment& + const WritableFragment& fragment() const { return mFragment; @@ -177,7 +177,7 @@ class basic_nsAWritableString return mPosition - mFragment.mStart; } - Iterator& + WritingIterator& operator+=( difference_type n ) { if ( n < 0 ) @@ -185,7 +185,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_forward()); + difference_type one_hop = min(n, size_forward()); mPosition += one_hop; normalize_forward(); n -= one_hop; @@ -194,7 +194,7 @@ class basic_nsAWritableString return *this; } - Iterator& + WritingIterator& operator-=( difference_type n ) { if ( n < 0 ) @@ -202,7 +202,7 @@ class basic_nsAWritableString while ( n ) { - difference_type one_hop = std::min(n, size_backward()); + difference_type one_hop = min(n, size_backward()); mPosition -= one_hop; normalize_backward(); n -= one_hop; @@ -212,52 +212,37 @@ class basic_nsAWritableString } PRBool - operator==( const Iterator& rhs ) const + operator==( const WritingIterator& rhs ) const { return mPosition == rhs.mPosition; } PRBool - operator!=( const Iterator& rhs ) const + operator!=( const WritingIterator& rhs ) const { return mPosition != rhs.mPosition; } }; + typedef WritingIterator Iterator; + public: -#ifdef HAVE_CPP_USING - using basic_nsAReadableString::Begin; - using basic_nsAReadableString::End; -#else - basic_nsAReadableString::ConstIterator - Begin( PRUint32 aOffset = 0 ) const + WritingIterator + BeginWriting( PRUint32 aOffset = 0 ) { - return basic_nsAReadableString::Begin(aOffset); - } - - basic_nsAReadableString::ConstIterator - End( PRUint32 aOffset = 0 ) const - { - return basic_nsAReadableString::End(aOffset); - } -#endif - - Iterator - Begin( PRUint32 aOffset = 0 ) - { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, aOffset); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, aOffset); + return WritingIterator(fragment, startPos, *this); } - Iterator - End( PRUint32 aOffset = 0 ) + WritingIterator + EndWriting( PRUint32 aOffset = 0 ) { - Fragment fragment; - CharT* startPos = GetFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); - return Iterator(fragment, startPos, *this); + WritableFragment fragment; + CharT* startPos = GetWritableFragment(fragment, kFragmentAt, max(0U, Length()-aOffset)); + return WritingIterator(fragment, startPos, *this); } @@ -339,20 +324,20 @@ class basic_nsAWritableString NS_DEF_STRING_COMPARISONS(basic_nsAWritableString) template -typename basic_nsAWritableString::Iterator -copy_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_forward(), result.size_forward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_forward(), result.size_forward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(last.operator->() - first.operator->())); // assert(lengthToCopy > 0); - std::char_traits::copy(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::copy(result.operator->(), first.operator->(), lengthToCopy); first += PRInt32(lengthToCopy); result += PRInt32(lengthToCopy); @@ -362,18 +347,18 @@ copy_chunky( typename basic_nsAReadableString::ConstIterator first, } template -typename basic_nsAWritableString::Iterator -copy_backward_chunky( typename basic_nsAReadableString::ConstIterator first, - typename basic_nsAReadableString::ConstIterator last, - typename basic_nsAWritableString::Iterator result ) +typename basic_nsAWritableString::WritingIterator +copy_backward_chunky( typename basic_nsAReadableString::ReadingIterator first, + typename basic_nsAReadableString::ReadingIterator last, + typename basic_nsAWritableString::WritingIterator result ) { while ( first != last ) { - PRUint32 lengthToCopy = PRUint32( std::min(first.size_backward(), result.size_backward()) ); + PRUint32 lengthToCopy = PRUint32( min(first.size_backward(), result.size_backward()) ); if ( first.fragment().mStart == last.fragment().mStart ) - lengthToCopy = std::min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); + lengthToCopy = min(lengthToCopy, PRUint32(first.operator->() - last.operator->())); - std::char_traits::move(result.operator->(), first.operator->(), lengthToCopy); + nsCharTraits::move(result.operator->(), first.operator->(), lengthToCopy); first -= PRInt32(lengthToCopy); result -= PRInt32(lengthToCopy); @@ -390,7 +375,7 @@ void basic_nsAWritableString::Assign( const basic_nsAReadableString& rhs ) { SetLength(rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin()); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting()); } template @@ -399,7 +384,7 @@ basic_nsAWritableString::Append( const basic_nsAReadableString& rh { PRUint32 oldLength = Length(); SetLength(oldLength + rhs.Length()); - copy_chunky(rhs.Begin(), rhs.End(), Begin(oldLength)); + copy_chunky(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength)); } template @@ -407,31 +392,27 @@ void basic_nsAWritableString::AppendChar( CharT aChar ) { SetLength(Length()+1); - *End(1) = aChar; + *EndWriting(1) = aChar; } template void basic_nsAWritableString::Insert( const basic_nsAReadableString& aReadable, PRUint32 aPosition ) { - typedef typename basic_nsAReadableString readable_t; - PRUint32 oldLength = Length(); SetLength(oldLength + aReadable.Length()); if ( aPosition < oldLength ) - copy_backward_chunky(readable_t::Begin(aPosition), readable_t::Begin(oldLength), End()); + copy_backward_chunky(BeginReading(aPosition), BeginReading(oldLength), EndWriting()); else aPosition = oldLength; - copy_chunky(aReadable.Begin(), aReadable.End(), Begin(aPosition)); + copy_chunky(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(aPosition)); } template void basic_nsAWritableString::Cut( PRUint32 cutStart, PRUint32 cutLength ) { - typedef typename basic_nsAReadableString readable_t; - - copy_chunky(readable_t::Begin(cutStart+cutLength), readable_t::End(), Begin(cutStart)); + copy_chunky(BeginReading(cutStart+cutLength), EndReading(), BeginWriting(cutStart)); SetLength(Length()-cutLength); } @@ -450,21 +431,19 @@ basic_nsAWritableString::Replace( PRUint32 cutStart, PRUint32 cutLength, PRUint32 newLength = oldLength - cutLength + replacementLength; - typedef typename basic_nsAReadableString readable_t; - if ( cutLength > replacementLength ) - copy_chunky(readable_t::Begin(cutEnd), readable_t::End(), Begin(replacementEnd)); + copy_chunky(BeginReading(cutEnd), EndReading(), BeginWriting(replacementEnd)); SetLength(newLength); if ( cutLength < replacementLength ) - copy_backward_chunky(readable_t::Begin(cutEnd), readable_t::Begin(oldLength), Begin(replacementEnd)); + copy_backward_chunky(BeginReading(cutEnd), BeginReading(oldLength), BeginWriting(replacementEnd)); - copy_chunky(aReplacement.Begin(), aReplacement.End(), Begin(cutStart)); + copy_chunky(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart)); } // operator>> // getline (maybe) -typedef basic_nsAWritableString nsAWritableString; -typedef basic_nsAWritableString nsAWritableCString; +typedef basic_nsAWritableString nsAWritableString; +typedef basic_nsAWritableString nsAWritableCString; #endif // !defined(_nsAWritableString_h__) diff --git a/mozilla/xpcom/tests/StringFactoringTests/StringTest.mcp b/mozilla/xpcom/tests/StringFactoringTests/StringTest.mcp index c80e6fad3d162d14eaeef28094f42cc0b5c7c4f3..66cfd15c170b48a8f90e2d73d17afd6f401ec8a8 100644 GIT binary patch delta 1336 zcmZ9Me{54#6vyv*@3pU8yU|~+j2ZSyhl45Ix^+sxjn(0j31VHxud!t7SO;@3o3_U2 zA2NvsvlwW1rSA_64j~33%Er~bKa4Qv2vCwSl#E13+!6y4{xSYzreHnqy$*lek2Y=WD!6(g27yr5MPGDyF+OX-kErLZ7h4SwRAkXp-?^j(V!KMU3A#tqCb|{*l3Rk>~rUqLZkT)RAd-|dcsJC{@UPSv;8Sx*Ppwyg2oG*(jkL9Hw6dj{l|RiP?CA~oD)p>oT+k&J?yux z5_9j*=5j-2EK>O=P)nv*1(@LXbZ~1@1vhiKpKoYDKGFypA>@T)`It)x4u3(&n-35y z0KGP6QM%4>zjG{BSqN<15rA~a%GS(Sc$WI4ix<>~NC(~Yfu(?DX8~yHtqsaYH{m5w zZny^yHh%6GvvnY$eFT?$Ia zb{ON*A*V8D=R0}jZXAXRlow0jgK}j(18E7{;7A@5NBl6W&$N-k=m zyjm^&{Kyh{g%{P?K?EJjHZMPBsU-^%_D*9g9_=MNFK)t~`%afX?82ULX}tXmHZ?b; zaj2h@*H!Vp1AG$WZ2JDz6S#j#kIUZ1o|bg})nVk9b#A|fzCq{h$B|#rxuXPqku-70?d0mo5XST)hk`*<)nt&5`L=(Bq8r>`Twrg0G8 z!Qa(VT|a@p4sJ&0rVr7d*7f`$vP@|U8bY%&{MbboAv zj2PLnY<;^KZ<|g*7vmB)(Tl!Bjgkz1p#l66{6qer{^5_fWy@GH*x0)B-et?OzjvDR z&OM*|J?-sz=RQg)!zm@{w0?Ueh zrclBMdIW=&+i-#YPj1H?JwhGMLbgP%kZG24F6+oR3?R`(?r{ee7p+-avs$8xCsDK~ zx@Bu?Xm{HVLgfBY^IK-k{>JN(JuNGFMmIZi=^4*rI#4OmT_rIZ_QsuI^LH(yZ+r9D zaqq?q?Uhc}w@n86O;!_oTyP#TZ31A=@Ph_GSYOakXmg8Si)GShImPV!@^1w#CeQxa zm_Dx*7K%boudcO030qJ)?Q&yfxzO|F1eWKg(X^^u7OmPBq~o4Sy1$@_W@fL_Vm5tZ z5IR}G4kj6WFMtNDx%F6)JQe&roqqogQ&YbKb#?m?bfwb|_j6GAna@78pgNtts;li# z#eS;20QAK#Ocgdn9p$R{A)ox~_j?J+D`%jOQAm%W15e3*A92)=jYy{2Yppp97m< zpX~Qx?+i~J%mDpw6PP-^E#rV12Sbeu;X%9S0ludVM!jErUKUDr>L28bE1=*oC6Mrv?Y2WI!JZh#~t}4e|!#&w%I<=0R!nUutunxj|V}FDOLy(-R09 zjQT?Hv}*;td=W21G|{%bnQXeU4sX$SmK>^Q@FHYeyzyi=@5)~?>&h84%eG, class AllocatorT = nsStringAllocator > +template < class CharT, class TraitsT = nsCharTraits, class AllocatorT = nsStringAllocator > class basic_nsStdStringWrapper : public basic_nsAWritableString /* @@ -47,8 +47,8 @@ class basic_nsStdStringWrapper std::basic_string mRawString; typedef typename basic_nsAWritableString::FragmentRequest FragmentRequest; - typedef typename basic_nsAWritableString::ConstFragment ConstFragment; - typedef typename basic_nsAWritableString::Fragment Fragment; + typedef typename basic_nsAWritableString::ReadableFragment ReadableFragment; + typedef typename basic_nsAWritableString::WritableFragment WritableFragment; typedef std::basic_string basic_string_t; @@ -71,8 +71,8 @@ class basic_nsStdStringWrapper protected: virtual const void* Implementation() const; - virtual const CharT* GetConstFragment( ConstFragment&, FragmentRequest, PRUint32 ) const; - virtual CharT* GetFragment( Fragment&, FragmentRequest, PRUint32 ); + virtual const CharT* GetReadableFragment( ReadableFragment&, FragmentRequest, PRUint32 ) const; + virtual CharT* GetWritableFragment( WritableFragment&, FragmentRequest, PRUint32 ); public: basic_nsStdStringWrapper() { } @@ -164,7 +164,7 @@ basic_nsStdStringWrapper::Implementation() const template const CharT* -basic_nsStdStringWrapper::GetConstFragment( ConstFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const +basic_nsStdStringWrapper::GetReadableFragment( ReadableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -183,7 +183,7 @@ basic_nsStdStringWrapper::GetConstFragment( ConstFra template CharT* -basic_nsStdStringWrapper::GetFragment( Fragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) +basic_nsStdStringWrapper::GetWritableFragment( WritableFragment& aFragment, FragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { @@ -219,7 +219,7 @@ template void basic_nsStdStringWrapper::Append( const basic_nsAReadableString& rhs ) { - mRawString.append(rhs.Begin(), rhs.End()); + mRawString.append(rhs.BeginReading(), rhs.EndReading()); } template @@ -233,7 +233,7 @@ template void basic_nsStdStringWrapper::Insert( const basic_nsAReadableString& rhs, PRUint32 atPosition ) { - mRawString.insert(mRawString.begin()+atPosition, rhs.Begin(), rhs.End()); + mRawString.insert(mRawString.begin()+atPosition, rhs.BeginReading(), rhs.EndReading()); } template diff --git a/mozilla/xpcom/tests/StringFactoringTests/test_main.cc b/mozilla/xpcom/tests/StringFactoringTests/test_main.cc index b670da79cc8..564d18a6c06 100644 --- a/mozilla/xpcom/tests/StringFactoringTests/test_main.cc +++ b/mozilla/xpcom/tests/StringFactoringTests/test_main.cc @@ -16,7 +16,7 @@ print_string( const nsAReadableString& s ) char operator()( PRUnichar c ) { return char(c); } }; - transform(s.Begin(), s.End(), ostream_iterator(cout), PRUnichar_to_char()); + transform(s.BeginReading(), s.EndReading(), ostream_iterator(cout), PRUnichar_to_char()); return cout; } @@ -71,11 +71,11 @@ test_multifragment_iterators( const basic_nsAReadableString& aString ) int tests_failed = 0; - ConstIterator iter1 = aString.Begin(); - ConstIterator iter2 = aString.Begin(); + ConstIterator iter1 = aString.BeginReading(); + ConstIterator iter2 = aString.BeginReading(); ++iter2; ++iter2; - ConstIterator iter3 = aString.End(); + ConstIterator iter3 = aString.EndReading(); --iter3; ++iter1; ++iter1; if ( iter1 != iter2 ) @@ -180,7 +180,7 @@ test_readable_hello( const basic_nsAReadableString& aReadable ) ++tests_failed; } - basic_nsAReadableString::ConstIterator iter = aReadable.Begin(); + basic_nsAReadableString::ConstIterator iter = aReadable.BeginReading(); if ( *iter != CharT('H') ) { cout << "FAILED |test_readable_hello|: didn't start out pointing to the right thing, or else couldn't be dereferenced. --> '" << *iter << "'" << endl; @@ -195,25 +195,25 @@ test_readable_hello( const basic_nsAReadableString& aReadable ) ++tests_failed; } - iter = aReadable.End(); + iter = aReadable.EndReading(); --iter; if ( *iter != CharT('o') ) { - cout << "FAILED |test_readable_hello|: iterator couldn't be set to |End()|, or else couldn't be decremented, or else couldn't be dereferenced. --> '" << *iter << "'" << endl; + cout << "FAILED |test_readable_hello|: iterator couldn't be set to |EndReading()|, or else couldn't be decremented, or else couldn't be dereferenced. --> '" << *iter << "'" << endl; ++tests_failed; } - basic_nsAReadableString::ConstIterator iter1 = aReadable.Begin(3); + basic_nsAReadableString::ConstIterator iter1 = aReadable.BeginReading(3); if ( *iter1 != CharT('l') ) { - cout << "FAILED |test_readable_hello|: iterator couldn't be set to |Begin(n)|, or else couldn't be dereferenced. --> '" << *iter1 << "'" << endl; + cout << "FAILED |test_readable_hello|: iterator couldn't be set to |BeginReading(n)|, or else couldn't be dereferenced. --> '" << *iter1 << "'" << endl; ++tests_failed; } - basic_nsAReadableString::ConstIterator iter2 = aReadable.End(2); + basic_nsAReadableString::ConstIterator iter2 = aReadable.EndReading(2); if ( *iter2 != CharT('l') ) { - cout << "FAILED |test_readable_hello|: iterator couldn't be set to |End(n)|, or else couldn't be dereferenced. --> '" << *iter2 << "'" << endl; + cout << "FAILED |test_readable_hello|: iterator couldn't be set to |EndReading(n)|, or else couldn't be dereferenced. --> '" << *iter2 << "'" << endl; ++tests_failed; }