diff --git a/string/public/nsAFlatString.h b/string/public/nsAFlatString.h index c197bbf32ed..48c717efc6f 100644 --- a/string/public/nsAFlatString.h +++ b/string/public/nsAFlatString.h @@ -35,16 +35,16 @@ class NS_COM nsAFlatString { public: // don't really want this to be virtual, and won't after |obsolete_nsString| is really dead - virtual const PRUnichar* get() const; - PRUnichar operator[]( PRUint32 i ) const { return get()[ i ]; } - PRUnichar CharAt( PRUint32 ) const; + virtual const char_type* get() const; + char_type operator[]( PRUint32 i ) const { return get()[ i ]; } + char_type CharAt( PRUint32 ) const; virtual PRUint32 Length() const; // protected: // can't hide these (yet), since I call them from forwarding routines in |nsPromiseFlatString| public: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ); }; class NS_COM nsAFlatCString @@ -52,20 +52,20 @@ class NS_COM nsAFlatCString { public: // don't really want this to be virtual, and won't after |obsolete_nsCString| is really dead - virtual const char* get() const; - char operator[]( PRUint32 i ) const { return get()[ i ]; } - char CharAt( PRUint32 ) const; + virtual const char_type* get() const; + char_type operator[]( PRUint32 i ) const { return get()[ i ]; } + char_type CharAt( PRUint32 ) const; virtual PRUint32 Length() const; // protected: // can't hide these (yet), since I call them from forwarding routines in |nsPromiseFlatCString| public: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ); }; inline -PRUnichar +nsAFlatString::char_type nsAFlatString::CharAt( PRUint32 i ) const { NS_ASSERTION(i const_iterator; - typedef nsWritingIterator iterator; - - typedef PRUint32 size_type; - typedef PRUint32 index_type; - - + typedef PRUnichar char_type; + typedef char incompatible_char_type; + + typedef nsBufferHandle buffer_handle_type; + typedef nsConstBufferHandle const_buffer_handle_type; + typedef nsSharedBufferHandle shared_buffer_handle_type; + + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + + typedef nsAString self_type; + typedef nsAString abstract_string_type; + + typedef nsReadingIterator const_iterator; + typedef nsWritingIterator iterator; + + typedef nsAPromiseString promise_type; + + typedef PRUint32 size_type; + typedef PRUint32 index_type; + public: // nsAString(); // auto-generated default constructor OK (we're abstract anyway) // nsAString( const self_type& ); // auto-generated copy-constructor OK (again, only because we're abstract) virtual ~nsAString() { } // ...yes, I expect to be sub-classed - virtual PRUint32 GetImplementationFlags() const; - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual PRUint32 GetImplementationFlags() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; /** * |GetBufferHandle()| will return either |0|, or a reasonable pointer. @@ -95,7 +103,7 @@ class NS_COM nsAString virtual PRBool IsVoid() const; virtual void SetIsVoid( PRBool ); - + /** * |CharAt|, |operator[]|, |First()|, and |Last()| are not guaranteed to be constant-time operations. * These signatures should be pushed down into interfaces that guarantee flat allocation. @@ -285,25 +293,34 @@ class NS_COM nsAString // protected: public: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 = 0 ) const = 0; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 = 0 ) = 0; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 = 0 ) const = 0; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 = 0 ) = 0; virtual PRBool IsDependentOn( const self_type& aString ) const { return &aString == this; } }; class NS_COM nsACString { public: - typedef nsACString self_type; - typedef nsAPromiseCString promise_type; - typedef char char_type; - typedef PRUnichar incompatible_char_type; + typedef char char_type; + typedef PRUnichar incompatible_char_type; + typedef nsBufferHandle buffer_handle_type; + typedef nsConstBufferHandle const_buffer_handle_type; + typedef nsSharedBufferHandle shared_buffer_handle_type; - typedef nsReadingIterator const_iterator; - typedef nsWritingIterator iterator; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; - typedef PRUint32 size_type; - typedef PRUint32 index_type; + typedef nsACString self_type; + typedef nsACString abstract_string_type; + + typedef nsReadingIterator const_iterator; + typedef nsWritingIterator iterator; + + typedef nsAPromiseCString promise_type; + + typedef PRUint32 size_type; + typedef PRUint32 index_type; @@ -313,10 +330,10 @@ class NS_COM nsACString virtual ~nsACString() { } // ...yes, I expect to be sub-classed - virtual PRUint32 GetImplementationFlags() const; - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual PRUint32 GetImplementationFlags() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; /** * |GetBufferHandle()| will return either |0|, or a reasonable pointer. @@ -340,7 +357,7 @@ class NS_COM nsACString virtual PRBool IsVoid() const; virtual void SetIsVoid( PRBool ); - + /** * |CharAt|, |operator[]|, |First()|, and |Last()| are not guaranteed to be constant-time operations. * These signatures should be pushed down into interfaces that guarantee flat allocation. @@ -530,8 +547,8 @@ class NS_COM nsACString // protected: public: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 = 0 ) const = 0; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 = 0 ) = 0; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 = 0 ) const = 0; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 = 0 ) = 0; virtual PRBool IsDependentOn( const self_type& aString ) const { return &aString == this; } }; @@ -631,21 +648,23 @@ nsAString::EndWriting( iterator& aResult ) class NS_COM nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const = 0; + typedef nsAString::char_type char_type; + + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const = 0; }; class NS_COM nsDefaultStringComparator : public nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; class NS_COM nsCaseInsensitiveStringComparator : public nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; NS_COM int Compare( const nsAString& lhs, const nsAString& rhs, const nsStringComparator& = nsDefaultStringComparator() ); @@ -760,21 +779,23 @@ nsACString::EndWriting( iterator& aResult ) class NS_COM nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const = 0; + typedef nsACString::char_type char_type; + + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const = 0; }; class NS_COM nsDefaultCStringComparator : public nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; class NS_COM nsCaseInsensitiveCStringComparator : public nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; NS_COM int Compare( const nsACString& lhs, const nsACString& rhs, const nsCStringComparator& = nsDefaultCStringComparator() ); diff --git a/string/public/nsDependentConcatenation.h b/string/public/nsDependentConcatenation.h index 7186c9ba997..090a7b634db 100644 --- a/string/public/nsDependentConcatenation.h +++ b/string/public/nsDependentConcatenation.h @@ -52,49 +52,46 @@ class NS_COM nsDependentConcatenation { public: typedef nsDependentConcatenation self_type; - typedef PRUnichar char_type; - typedef nsAString string_type; - typedef string_type::const_iterator const_iterator; protected: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } - enum { kLeftString, kRightString }; + enum { kFirstString, kLastString }; int - GetCurrentStringFromFragment( const nsReadableFragment& aFragment ) const + GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const { - return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString; + return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString; } int - SetLeftStringInFragment( nsReadableFragment& aFragment ) const + SetFirstStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask); - return kLeftString; + return kFirstString; } int - SetRightStringInFragment( nsReadableFragment& aFragment ) const + SetLastStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() | mFragmentIdentifierMask); - return kRightString; + return kLastString; } public: - nsDependentConcatenation( const string_type& aLeftString, const string_type& aRightString, PRUint32 aMask = 1 ) + nsDependentConcatenation( const abstract_string_type& aFirstString, const abstract_string_type& aLastString, PRUint32 aMask = 1 ) : mFragmentIdentifierMask(aMask) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } - nsDependentConcatenation( const self_type& aLeftString, const string_type& aRightString ) - : mFragmentIdentifierMask(aLeftString.mFragmentIdentifierMask<<1) + nsDependentConcatenation( const self_type& aFirstString, const abstract_string_type& aLastString ) + : mFragmentIdentifierMask(aFirstString.mFragmentIdentifierMask<<1) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } // nsDependentConcatenation( const self_type& ); // auto-generated copy-constructor should be OK @@ -107,10 +104,10 @@ class NS_COM nsDependentConcatenation public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& ) const; -// virtual PRBool PromisesExactly( const string_type& ) const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; +// virtual PRBool PromisesExactly( const abstract_string_type& ) const; -// const self_type operator+( const string_type& rhs ) const; +// const self_type operator+( const abstract_string_type& rhs ) const; PRUint32 GetFragmentIdentifierMask() const { return mFragmentIdentifierMask; } @@ -120,8 +117,8 @@ class NS_COM nsDependentConcatenation // which would break the algorithm for distributing bits in the fragment identifier private: - const string_type* mStrings[2]; - PRUint32 mFragmentIdentifierMask; + const abstract_string_type* mStrings[2]; + PRUint32 mFragmentIdentifierMask; }; class NS_COM nsDependentCConcatenation @@ -129,49 +126,46 @@ class NS_COM nsDependentCConcatenation { public: typedef nsDependentCConcatenation self_type; - typedef char char_type; - typedef nsACString string_type; - typedef string_type::const_iterator const_iterator; protected: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } - enum { kLeftString, kRightString }; + enum { kFirstString, kLastString }; int - GetCurrentStringFromFragment( const nsReadableFragment& aFragment ) const + GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const { - return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString; + return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString; } int - SetLeftStringInFragment( nsReadableFragment& aFragment ) const + SetFirstStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask); - return kLeftString; + return kFirstString; } int - SetRightStringInFragment( nsReadableFragment& aFragment ) const + SetLastStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() | mFragmentIdentifierMask); - return kRightString; + return kLastString; } public: - nsDependentCConcatenation( const string_type& aLeftString, const string_type& aRightString, PRUint32 aMask = 1 ) + nsDependentCConcatenation( const abstract_string_type& aFirstString, const abstract_string_type& aLastString, PRUint32 aMask = 1 ) : mFragmentIdentifierMask(aMask) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } - nsDependentCConcatenation( const self_type& aLeftString, const string_type& aRightString ) - : mFragmentIdentifierMask(aLeftString.mFragmentIdentifierMask<<1) + nsDependentCConcatenation( const self_type& aFirstString, const abstract_string_type& aLastString ) + : mFragmentIdentifierMask(aFirstString.mFragmentIdentifierMask<<1) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } // nsDependentCConcatenation( const self_type& ); // auto-generated copy-constructor should be OK @@ -184,10 +178,10 @@ class NS_COM nsDependentCConcatenation public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& ) const; -// virtual PRBool PromisesExactly( const string_type& ) const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; +// virtual PRBool PromisesExactly( const abstract_string_type& ) const; -// const self_type operator+( const string_type& rhs ) const; +// const self_type operator+( const abstract_string_type& rhs ) const; PRUint32 GetFragmentIdentifierMask() const { return mFragmentIdentifierMask; } @@ -197,8 +191,8 @@ class NS_COM nsDependentCConcatenation // which would break the algorithm for distributing bits in the fragment identifier private: - const string_type* mStrings[2]; - PRUint32 mFragmentIdentifierMask; + const abstract_string_type* mStrings[2]; + PRUint32 mFragmentIdentifierMask; }; /* @@ -252,14 +246,14 @@ operator+( const nsACString& lhs, const nsACString& rhs ) #if 0 inline const nsDependentConcatenation -nsDependentConcatenation::operator+( const string_type& rhs ) const +nsDependentConcatenation::operator+( const abstract_string_type& rhs ) const { return nsDependentConcatenation(*this, rhs, mFragmentIdentifierMask<<1); } inline const nsDependentCConcatenation -nsDependentCConcatenation::operator+( const string_type& rhs ) const +nsDependentCConcatenation::operator+( const abstract_string_type& rhs ) const { return nsDependentCConcatenation(*this, rhs, mFragmentIdentifierMask<<1); } diff --git a/string/public/nsDependentString.h b/string/public/nsDependentString.h index 58822454167..f8d1703182d 100644 --- a/string/public/nsDependentString.h +++ b/string/public/nsDependentString.h @@ -46,22 +46,24 @@ class NS_COM nsDependentString : public nsAFlatString { public: + typedef nsDependentString self_type; + void - Rebind( const PRUnichar* aPtr ) + Rebind( const char_type* aPtr ) { mHandle.DataStart(aPtr); - mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); + mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); } void - Rebind( const PRUnichar* aStartPtr, const PRUnichar* aEndPtr ) + Rebind( const char_type* aStartPtr, const char_type* aEndPtr ) { mHandle.DataStart(aStartPtr); mHandle.DataEnd(aEndPtr); } void - Rebind( const PRUnichar* aPtr, PRUint32 aLength ) + Rebind( const char_type* aPtr, PRUint32 aLength ) { if ( aLength == PRUint32(-1) ) { @@ -72,23 +74,23 @@ class NS_COM nsDependentString Rebind(aPtr, aPtr+aLength); } - nsDependentString( const PRUnichar* aStartPtr, const PRUnichar* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } - nsDependentString( const PRUnichar* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } - explicit nsDependentString( const PRUnichar* aPtr ) { Rebind(aPtr); } + nsDependentString( const char_type* aStartPtr, const char_type* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } + nsDependentString( const char_type* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } + explicit nsDependentString( const char_type* aPtr ) { Rebind(aPtr); } - // nsDependentString( const nsDependentString& ); // auto-generated copy-constructor OK + // nsDependentString( const self_type& ); // auto-generated copy-constructor OK // ~nsDependentString(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentString& ); // we're immutable, so no copy-assignment operator + void operator=( const self_type& ); // we're immutable, so no copy-assignment operator public: - virtual const nsBufferHandle* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } - virtual const nsBufferHandle* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } + virtual const buffer_handle_type* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } + virtual const buffer_handle_type* GetBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } private: - nsConstBufferHandle mHandle; + const_buffer_handle_type mHandle; }; @@ -97,22 +99,24 @@ class NS_COM nsDependentCString : public nsAFlatCString { public: + typedef nsDependentCString self_type; + void - Rebind( const char* aPtr ) + Rebind( const char_type* aPtr ) { mHandle.DataStart(aPtr); - mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); + mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); } void - Rebind( const char* aStartPtr, const char* aEndPtr ) + Rebind( const char_type* aStartPtr, const char_type* aEndPtr ) { mHandle.DataStart(aStartPtr); mHandle.DataEnd(aEndPtr); } void - Rebind( const char* aPtr, PRUint32 aLength ) + Rebind( const char_type* aPtr, PRUint32 aLength ) { if ( aLength == PRUint32(-1) ) { @@ -123,23 +127,23 @@ class NS_COM nsDependentCString Rebind(aPtr, aPtr+aLength); } - nsDependentCString( const char* aStartPtr, const char* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } - nsDependentCString( const char* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } - explicit nsDependentCString( const char* aPtr ) { Rebind(aPtr); } + nsDependentCString( const char_type* aStartPtr, const char_type* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } + nsDependentCString( const char_type* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } + explicit nsDependentCString( const char_type* aPtr ) { Rebind(aPtr); } - // nsDependentCString( const nsDependentCString& ); // auto-generated copy-constructor OK - // ~nsDependentCString(); // auto-generated destructor OK + // nsDependentCString( const self_type& ); // auto-generated copy-constructor OK + // ~nsDependentCString(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentCString& ); // we're immutable, so no copy-assignment operator + void operator=( const self_type& ); // we're immutable, so no copy-assignment operator public: - virtual const nsBufferHandle* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } - virtual const nsBufferHandle* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } + virtual const buffer_handle_type* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } + virtual const buffer_handle_type* GetBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } private: - nsConstBufferHandle mHandle; + const_buffer_handle_type mHandle; }; #endif /* !defined(nsDependentString_h___) */ diff --git a/string/public/nsDependentSubstring.h b/string/public/nsDependentSubstring.h index 2169831810d..c0ddc6a1112 100644 --- a/string/public/nsDependentSubstring.h +++ b/string/public/nsDependentSubstring.h @@ -49,15 +49,15 @@ class NS_COM nsDependentSubstring calls to |GetReadableFragment()|. */ { - typedef nsAString string_type; - typedef string_type::const_iterator const_iterator; + public: + typedef nsDependentSubstring self_type; protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } public: - nsDependentSubstring( const string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) + nsDependentSubstring( const abstract_string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), mStartPos( NS_MIN(aStartPos, aString.Length()) ), mLength( NS_MIN(aLength, aString.Length()-mStartPos) ) @@ -74,21 +74,21 @@ class NS_COM nsDependentSubstring mLength = Distance(aStart, aEnd); } - // nsDependentSubstring( const nsDependentSubstring& ); // auto-generated copy-constructor should be OK + // nsDependentSubstring( const self_type& ); // auto-generated copy-constructor should be OK // ~nsDependentSubstring(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentSubstring& ); // we're immutable, you can't assign into a substring + void operator=( const self_type& ); // we're immutable, you can't assign into a substring public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& aString ) const { return mString.IsDependentOn(aString); } + virtual PRBool IsDependentOn( const abstract_string_type& aString ) const { return mString.IsDependentOn(aString); } private: - const string_type& mString; - PRUint32 mStartPos; - PRUint32 mLength; + const abstract_string_type& mString; + PRUint32 mStartPos; + PRUint32 mLength; }; class NS_COM nsDependentCSubstring @@ -102,15 +102,15 @@ class NS_COM nsDependentCSubstring calls to |GetReadableFragment()|. */ { - typedef nsACString string_type; - typedef string_type::const_iterator const_iterator; + public: + typedef nsDependentCSubstring self_type; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } public: - nsDependentCSubstring( const string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) + nsDependentCSubstring( const abstract_string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), mStartPos( NS_MIN(aStartPos, aString.Length()) ), mLength( NS_MIN(aLength, aString.Length()-mStartPos) ) @@ -127,21 +127,21 @@ class NS_COM nsDependentCSubstring mLength = Distance(aStart, aEnd); } - // nsDependentCSubstring( const nsDependentCSubstring& ); // auto-generated copy-constructor should be OK + // nsDependentCSubstring( const self_type& ); // auto-generated copy-constructor should be OK // ~nsDependentCSubstring(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentCSubstring& ); // we're immutable, you can't assign into a substring + void operator=( const self_type& ); // we're immutable, you can't assign into a substring public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& aString ) const { return mString.IsDependentOn(aString); } + virtual PRBool IsDependentOn( const abstract_string_type& aString ) const { return mString.IsDependentOn(aString); } private: - const string_type& mString; - PRUint32 mStartPos; - PRUint32 mLength; + const abstract_string_type& mString; + PRUint32 mStartPos; + PRUint32 mLength; }; diff --git a/string/public/nsFragmentedString.h b/string/public/nsFragmentedString.h index 3201a699d63..e69de29bb2d 100644 --- a/string/public/nsFragmentedString.h +++ b/string/public/nsFragmentedString.h @@ -1,69 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* - * The contents of this file are subject to the Mozilla Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is Mozilla XPCOM. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 2000 Netscape Communications Corporation. All - * Rights Reserved. - * - * Contributor(s): - * Scott Collins (original author) - * - */ - -#ifndef nsFragmentedString_h___ -#define nsFragmentedString_h___ - - // WORK IN PROGRESS - -#ifndef nsAString_h___ -#include "nsAString.h" -#endif - -#ifndef nsSharedBufferList_h___ -#include "nsSharedBufferList.h" -#endif - - -class nsFragmentedString - : public nsAString - /* - ... - */ - { - protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); - - public: - nsFragmentedString() { } - - virtual PRUint32 Length() const; - - virtual void SetLength( PRUint32 aNewLength ); - // virtual void SetCapacity( PRUint32 aNewCapacity ); - - // virtual void Cut( PRUint32 cutStart, PRUint32 cutLength ); - - protected: - // virtual void do_AssignFromReadable( const nsAString& ); - // virtual void do_AppendFromReadable( const nsAString& ); - // virtual void do_InsertFromReadable( const nsAString&, PRUint32 ); - // virtual void do_ReplaceFromReadable( PRUint32, PRUint32, const nsAString& ); - - private: - nsSharedBufferList mBufferList; - }; - -#endif // !defined(nsFragmentedString_h___) diff --git a/string/public/nsLiteralString.h b/string/public/nsLiteralString.h index 820d093415a..cfa8cb50a9d 100644 --- a/string/public/nsLiteralString.h +++ b/string/public/nsLiteralString.h @@ -36,28 +36,28 @@ #if 0 inline const nsDependentString -literal_string( const PRUnichar* aPtr ) +literal_string( const nsAString::char_type* aPtr ) { return nsDependentString(aPtr); } inline const nsDependentString -literal_string( const PRUnichar* aPtr, PRUint32 aLength ) +literal_string( const nsAString::char_type* aPtr, PRUint32 aLength ) { return nsDependentString(aPtr, aLength); } inline const nsDependentCString -literal_string( const char* aPtr ) +literal_string( const nsACString::char_type* aPtr ) { return nsDependentCString(aPtr); } inline const nsDependentCString -literal_string( const char* aPtr, PRUint32 aLength ) +literal_string( const nsACString::char_type* aPtr, PRUint32 aLength ) { return nsDependentCString(aPtr, aLength); } @@ -65,8 +65,8 @@ literal_string( const char* aPtr, PRUint32 aLength ) #ifdef HAVE_CPP_2BYTE_WCHAR_T #define NS_L(s) L##s - #define NS_MULTILINE_LITERAL_STRING(s) nsDependentString(NS_REINTERPRET_CAST(const PRUnichar*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) - #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s) nsDependentString n(NS_REINTERPRET_CAST(const PRUnichar*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) + #define NS_MULTILINE_LITERAL_STRING(s) nsDependentString(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) + #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s) nsDependentString n(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) #else #define NS_L(s) s #define NS_MULTILINE_LITERAL_STRING(s) NS_ConvertASCIItoUCS2(s, PRUint32(sizeof(s)-1)) diff --git a/string/public/nsPrintfCString.h b/string/public/nsPrintfCString.h index 8ef2c2466a0..680dea0551c 100755 --- a/string/public/nsPrintfCString.h +++ b/string/public/nsPrintfCString.h @@ -76,21 +76,21 @@ class NS_COM nsPrintfCString public: - explicit nsPrintfCString( const char* format, ... ); - nsPrintfCString( size_t n, const char* format, ...); + explicit nsPrintfCString( const char_type* format, ... ); + nsPrintfCString( size_t n, const char_type* format, ...); ~nsPrintfCString(); virtual PRUint32 Length() const; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } -// virtual PRBool GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } +// virtual PRBool GetReadableFragment( const_fragment_type&, nsFragmentRequest ) const; private: - char* mStart; - PRUint32 mLength; - char mLocalBuffer[ kLocalBufferSize + 1 ]; + char_type* mStart; + PRUint32 mLength; + char_type mLocalBuffer[ kLocalBufferSize + 1 ]; }; #endif // !defined(nsPrintfCString_h___) diff --git a/string/public/nsPromiseFlatString.h b/string/public/nsPromiseFlatString.h index 53f2d44cf38..3c63bc20112 100644 --- a/string/public/nsPromiseFlatString.h +++ b/string/public/nsPromiseFlatString.h @@ -83,28 +83,31 @@ class NS_COM nsPromiseFlatString : public nsAFlatString /* , public nsAPromiseString */ { - friend const nsPromiseFlatString PromiseFlatString( const nsAString& ); + friend const nsPromiseFlatString PromiseFlatString( const abstract_string_type& ); public: - nsPromiseFlatString( const nsPromiseFlatString& ); + typedef nsPromiseFlatString self_type; + + public: + nsPromiseFlatString( const self_type& ); protected: nsPromiseFlatString() : mPromisedString(&mFlattenedString) { } - explicit nsPromiseFlatString( const nsAString& aString ); + explicit nsPromiseFlatString( const abstract_string_type& aString ); // things we want to forward to the string we are promising - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; - virtual PRBool IsDependentOn( const nsAString& ) const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; // things we are forwarding now, but won't when we finally fix obsolete/nsString et al public: - virtual const PRUnichar* get() const; + virtual const char_type* get() const; virtual PRUint32 Length() const; protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; private: @@ -119,33 +122,36 @@ class NS_COM nsPromiseFlatString class NS_COM nsPromiseFlatCString : public nsAFlatCString /* , public nsAPromiseCString */ { - friend const nsPromiseFlatCString PromiseFlatCString( const nsACString& ); + friend const nsPromiseFlatCString PromiseFlatCString( const abstract_string_type& ); public: - nsPromiseFlatCString( const nsPromiseFlatCString& ); + typedef nsPromiseFlatCString self_type; + + public: + nsPromiseFlatCString( const self_type& ); protected: nsPromiseFlatCString() : mPromisedString(&mFlattenedString) { } - explicit nsPromiseFlatCString( const nsACString& aString ); + explicit nsPromiseFlatCString( const abstract_string_type& aString ); // things we want to forward to the string we are promising - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; - virtual PRBool IsDependentOn( const nsACString& ) const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; // things we are forwarding now, but won't when we finally fix obsolete/nsString et al public: - virtual const char* get() const; + virtual const char_type* get() const; virtual PRUint32 Length() const; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; private: // NOT TO BE IMPLEMENTED - void operator=( const nsPromiseFlatCString& ); + void operator=( const self_type& ); private: nsSharableCString mFlattenedString; diff --git a/string/public/nsSharableString.h b/string/public/nsSharableString.h index 9fec3209445..c962b2d0ba3 100644 --- a/string/public/nsSharableString.h +++ b/string/public/nsSharableString.h @@ -46,25 +46,23 @@ class NS_COM nsSharableString { public: typedef nsSharableString self_type; - typedef PRUnichar char_type; - typedef nsAString string_type; public: nsSharableString() { } nsSharableString( const self_type& aOther ) : mBuffer(aOther.mBuffer) { } - explicit nsSharableString( const string_type& aReadable ) { assign(aReadable); } - explicit nsSharableString( const nsSharedBufferHandle* aHandle ) : mBuffer(aHandle) { } + explicit nsSharableString( const abstract_string_type& aReadable ) { assign(aReadable); } + explicit nsSharableString( const shared_buffer_handle_type* aHandle ) : mBuffer(aHandle) { } self_type& - operator=( const string_type& aReadable ) + operator=( const abstract_string_type& aReadable ) { assign(aReadable); return *this; } protected: - void assign( const string_type& ); - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + void assign( const abstract_string_type& ); + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; protected: nsAutoBufferHandle mBuffer; @@ -76,25 +74,23 @@ class NS_COM nsSharableCString { public: typedef nsSharableCString self_type; - typedef char char_type; - typedef nsACString string_type; public: nsSharableCString() { } nsSharableCString( const self_type& aOther ) : mBuffer(aOther.mBuffer) { } - explicit nsSharableCString( const string_type& aReadable ) { assign(aReadable); } - explicit nsSharableCString( const nsSharedBufferHandle* aHandle ) : mBuffer(aHandle) { } + explicit nsSharableCString( const abstract_string_type& aReadable ) { assign(aReadable); } + explicit nsSharableCString( const shared_buffer_handle_type* aHandle ) : mBuffer(aHandle) { } self_type& - operator=( const string_type& aReadable ) + operator=( const abstract_string_type& aReadable ) { assign(aReadable); return *this; } protected: - void assign( const string_type& ); - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + void assign( const abstract_string_type& ); + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; protected: nsAutoBufferHandle mBuffer; diff --git a/string/public/nsStringIterator.h b/string/public/nsStringIterator.h index 2305e232dc4..abe2309b7e1 100644 --- a/string/public/nsStringIterator.h +++ b/string/public/nsStringIterator.h @@ -63,14 +63,17 @@ class nsReadingIterator typedef const CharT& reference; // typedef bidirectional_iterator_tag iterator_category; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + private: friend class nsAString; friend class nsACString; - typedef typename nsStringTraits::abstract_string_type string_type; + typedef typename nsStringTraits::abstract_string_type abstract_string_type; - nsReadableFragment mFragment; + const_fragment_type mFragment; const CharT* mPosition; - const string_type* mOwningString; + const abstract_string_type* mOwningString; public: nsReadingIterator() { } @@ -136,13 +139,13 @@ class nsReadingIterator return result; } - const nsReadableFragment& + const const_fragment_type& fragment() const { return mFragment; } - const string_type& + const abstract_string_type& string() const { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); @@ -203,14 +206,17 @@ class nsWritingIterator typedef CharT& reference; // typedef bidirectional_iterator_tag iterator_category; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + private: friend class nsAString; friend class nsACString; - typedef typename nsStringTraits::abstract_string_type string_type; + typedef typename nsStringTraits::abstract_string_type abstract_string_type; - nsWritableFragment mFragment; + fragment_type mFragment; CharT* mPosition; - string_type* mOwningString; + abstract_string_type* mOwningString; public: nsWritingIterator() { } @@ -276,26 +282,26 @@ class nsWritingIterator return result; } - const nsWritableFragment& + const fragment_type& fragment() const { return mFragment; } - nsWritableFragment& + fragment_type& fragment() { return mFragment; } - const string_type& + const abstract_string_type& string() const { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); return *mOwningString; } - string_type& + abstract_string_type& string() { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); diff --git a/string/public/nsXPIDLString.h b/string/public/nsXPIDLString.h index 53bcd878538..5834da348dd 100644 --- a/string/public/nsXPIDLString.h +++ b/string/public/nsXPIDLString.h @@ -70,6 +70,9 @@ class NS_COM nsXPIDLString : public nsSharableString { + public: + typedef nsXPIDLString self_type; + public: nsXPIDLString() { @@ -80,7 +83,7 @@ class NS_COM nsXPIDLString #endif } - nsXPIDLString( const nsXPIDLString& aString ) + nsXPIDLString( const self_type& aString ) : nsSharableString(aString.GetSharedBufferHandle()) // copy-constructor required (or else C++ generates one for us) { @@ -98,8 +101,8 @@ class NS_COM nsXPIDLString } #endif - nsXPIDLString& - operator=( const nsXPIDLString& rhs ) + self_type& + operator=( const self_type& rhs ) // copy-assignment operator required (or else C++ generates one for us) { // self-assignment is handled by the underlying |nsAutoBufferHandle| @@ -107,11 +110,11 @@ class NS_COM nsXPIDLString return *this; } - void Adopt( PRUnichar* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } + void Adopt( char_type* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } // deprecated, to be eliminated - operator const PRUnichar*() const { return get(); } - PRUnichar operator[]( int i ) const { return get()[ i ]; } + operator const char_type*() const { return get(); } + char_type operator[]( int i ) const { return get()[ i ]; } class getter_Copies_t @@ -121,7 +124,7 @@ class NS_COM nsXPIDLString // getter_Copies_t( const getter_Copies_t& ); // auto-generated copy-constructor OK // getter_Copies_t& operator=( const getter_Copies_t& ); // auto-generated assignment operator OK - operator PRUnichar**() const { return mString->PrepareForUseAsOutParam(); } + operator char_type**() const { return mString->PrepareForUseAsOutParam(); } private: nsXPIDLString* mString; @@ -131,13 +134,13 @@ class NS_COM nsXPIDLString protected: #if DEBUG_STRING_STATS - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; #endif - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; // overridden to fix the length after `out' parameter assignment, if necessary - PRUnichar** PrepareForUseAsOutParam(); + char_type** PrepareForUseAsOutParam(); #if DEBUG_STRING_STATS static size_t sCreatedCount; // total number of |nsXPIDLString|s ever created @@ -164,6 +167,9 @@ getter_Copies( nsXPIDLString& aString ) class NS_COM nsXPIDLCString : public nsSharableCString { + public: + typedef nsXPIDLCString self_type; + public: nsXPIDLCString() { @@ -174,7 +180,7 @@ class NS_COM nsXPIDLCString #endif } - nsXPIDLCString( const nsXPIDLCString& aString ) + nsXPIDLCString( const self_type& aString ) : nsSharableCString(aString.GetSharedBufferHandle()) // copy-constructor required (or else C++ generates one for us) { @@ -192,8 +198,8 @@ class NS_COM nsXPIDLCString } #endif - nsXPIDLCString& - operator=( const nsXPIDLCString& rhs ) + self_type& + operator=( const self_type& rhs ) // copy-assignment operator required (or else C++ generates one for us) { // self-assignment is handled by the underlying |nsAutoBufferHandle| @@ -201,11 +207,11 @@ class NS_COM nsXPIDLCString return *this; } - void Adopt( char* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } + void Adopt( char_type* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } // deprecated, to be eliminated - operator const char*() const { return get(); } - char operator[]( int i ) const { return get()[ i ]; } + operator const char_type*() const { return get(); } + char_type operator[]( int i ) const { return get()[ i ]; } class getter_Copies_t @@ -215,7 +221,7 @@ class NS_COM nsXPIDLCString // getter_Copies_t( const getter_Copies_t& ); // auto-generated copy-constructor OK // getter_Copies_t& operator=( const getter_Copies_t& ); // auto-generated assignment operator OK - operator char**() const { return mString->PrepareForUseAsOutParam(); } + operator char_type**() const { return mString->PrepareForUseAsOutParam(); } private: nsXPIDLCString* mString; @@ -225,13 +231,13 @@ class NS_COM nsXPIDLCString protected: #if DEBUG_STRING_STATS - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; #endif - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; // overridden to fix the length after `out' parameter assignment, if necessary - char** PrepareForUseAsOutParam(); + char_type** PrepareForUseAsOutParam(); #if DEBUG_STRING_STATS static size_t sCreatedCount; // total number of |nsXPIDLCString|s ever created diff --git a/string/src/nsAFlatString.cpp b/string/src/nsAFlatString.cpp index d9f7b1607a8..c8bd447e557 100644 --- a/string/src/nsAFlatString.cpp +++ b/string/src/nsAFlatString.cpp @@ -23,8 +23,8 @@ #include "nsAFlatString.h" -const PRUnichar* -nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsAFlatString::char_type* +nsAFlatString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -32,7 +32,7 @@ nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, ns case kLastFragment: case kFragmentAt: { - const nsBufferHandle* buffer = GetBufferHandle(); + const buffer_handle_type* buffer = GetBufferHandle(); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -46,8 +46,8 @@ nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, ns } } -PRUnichar* -nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) +nsAFlatString::char_type* +nsAFlatString::GetWritableFragment( fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { @@ -55,7 +55,7 @@ nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, ns case kLastFragment: case kFragmentAt: { - nsBufferHandle* buffer = NS_CONST_CAST(nsBufferHandle*, GetBufferHandle()); + buffer_handle_type* buffer = NS_CONST_CAST(buffer_handle_type*, GetBufferHandle()); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -69,8 +69,8 @@ nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, ns } } -const char* -nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsAFlatCString::char_type* +nsAFlatCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -78,7 +78,7 @@ nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFrag case kLastFragment: case kFragmentAt: { - const nsBufferHandle* buffer = GetBufferHandle(); + const buffer_handle_type* buffer = GetBufferHandle(); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -92,8 +92,8 @@ nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFrag } } -char* -nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) +nsAFlatCString::char_type* +nsAFlatCString::GetWritableFragment( fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { @@ -101,7 +101,7 @@ nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFrag case kLastFragment: case kFragmentAt: { - nsBufferHandle* buffer = NS_CONST_CAST(nsBufferHandle*, GetBufferHandle()); + buffer_handle_type* buffer = NS_CONST_CAST(buffer_handle_type*, GetBufferHandle()); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -118,29 +118,29 @@ nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFrag PRUint32 nsAFlatString::Length() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); return PRUint32(handle ? handle->DataLength() : 0); } PRUint32 nsAFlatCString::Length() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); return PRUint32(handle ? handle->DataLength() : 0); } -const PRUnichar* +const nsAFlatString::char_type* nsAFlatString::get() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); // NS_ASSERTION(handle, "handle is null!"); return handle ? handle->DataStart() : 0; } -const char* +const nsAFlatCString::char_type* nsAFlatCString::get() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); // NS_ASSERTION(handle, "handle is null!"); return handle ? handle->DataStart() : 0; } diff --git a/string/src/nsAString.cpp b/string/src/nsAString.cpp index 912c4aada74..d2fbe279f8d 100644 --- a/string/src/nsAString.cpp +++ b/string/src/nsAString.cpp @@ -28,13 +28,13 @@ int -nsDefaultStringComparator::operator()( const PRUnichar* lhs, const PRUnichar* rhs, PRUint32 aLength ) const +nsDefaultStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { - return nsCharTraits::compare(lhs, rhs, aLength); + return nsCharTraits::compare(lhs, rhs, aLength); } int -nsCaseInsensitiveStringComparator::operator()( const PRUnichar* lhs, const PRUnichar* rhs, PRUint32 aLength ) const +nsCaseInsensitiveStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { return nsCRT::strncasecmp(lhs, rhs, aLength); } @@ -85,20 +85,19 @@ Compare( const nsAString& lhs, const nsAString& rhs, const nsStringComparator& a return 0; } - -const nsSharedBufferHandle* +const nsAString::shared_buffer_handle_type* nsAString::GetSharedBufferHandle() const { return 0; } -const nsBufferHandle* +const nsAString::buffer_handle_type* nsAString::GetFlatBufferHandle() const { return GetSharedBufferHandle(); } -const nsBufferHandle* +const nsAString::buffer_handle_type* nsAString::GetBufferHandle() const { return GetSharedBufferHandle(); @@ -108,12 +107,13 @@ PRUint32 nsAString::GetImplementationFlags() const { PRUint32 flags = 0; - const nsSharedBufferHandle* handle = GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = GetSharedBufferHandle(); if ( handle ) flags = handle->GetImplementationFlags(); return flags; } + PRBool nsAString::IsVoid() const { @@ -132,6 +132,8 @@ nsAString::Equals( const char_type* rhs ) const return Equals(nsDependentString(rhs)); } + + nsAString::char_type nsAString::First() const { @@ -529,16 +531,14 @@ nsAString::do_ReplaceFromReadable( index_type cutStart, size_type cutLength, con } - - int -nsDefaultCStringComparator::operator()( const char* lhs, const char* rhs, PRUint32 aLength ) const +nsDefaultCStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { - return nsCharTraits::compare(lhs, rhs, aLength); + return nsCharTraits::compare(lhs, rhs, aLength); } int -nsCaseInsensitiveCStringComparator::operator()( const char* lhs, const char* rhs, PRUint32 aLength ) const +nsCaseInsensitiveCStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { return nsCRT::strncasecmp(lhs, rhs, aLength); } @@ -589,20 +589,19 @@ Compare( const nsACString& lhs, const nsACString& rhs, const nsCStringComparator return 0; } - -const nsSharedBufferHandle* +const nsACString::shared_buffer_handle_type* nsACString::GetSharedBufferHandle() const { return 0; } -const nsBufferHandle* +const nsACString::buffer_handle_type* nsACString::GetFlatBufferHandle() const { return GetSharedBufferHandle(); } -const nsBufferHandle* +const nsACString::buffer_handle_type* nsACString::GetBufferHandle() const { return GetSharedBufferHandle(); @@ -612,12 +611,13 @@ PRUint32 nsACString::GetImplementationFlags() const { PRUint32 flags = 0; - const nsSharedBufferHandle* handle = GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = GetSharedBufferHandle(); if ( handle ) flags = handle->GetImplementationFlags(); return flags; } + PRBool nsACString::IsVoid() const { diff --git a/string/src/nsDependentConcatenation.cpp b/string/src/nsDependentConcatenation.cpp index 58b549b2f8a..f9ecc3b84d2 100644 --- a/string/src/nsDependentConcatenation.cpp +++ b/string/src/nsDependentConcatenation.cpp @@ -35,26 +35,26 @@ PRUint32 nsDependentConcatenation::Length() const { - return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length(); + return mStrings[kFirstString]->Length() + mStrings[kLastString]->Length(); } PRBool -nsDependentConcatenation::IsDependentOn( const string_type& aString ) const +nsDependentConcatenation::IsDependentOn( const abstract_string_type& aString ) const { - return mStrings[0]->IsDependentOn(aString) || mStrings[1]->IsDependentOn(aString); + return mStrings[kFirstString]->IsDependentOn(aString) || mStrings[kLastString]->IsDependentOn(aString); } #if 0 PRBool -nsDependentConcatenation::PromisesExactly( const string_type& aString ) const +nsDependentConcatenation::PromisesExactly( const abstract_string_type& aString ) const { // Not really like this, test for the empty string, etc - return mStrings[0] == &aString && !mStrings[1] || !mStrings[0] && mStrings[1] == &aString; + return mStrings[kFirstString] == &aString && !mStrings[kLastString] || !mStrings[kFirstString] && mStrings[kLastString] == &aString; } #endif -const PRUnichar* -nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentConcatenation::char_type* +nsDependentConcatenation::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { int whichString; @@ -68,20 +68,20 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF break; case kFirstFragment: - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); break; case kLastFragment: - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); break; case kFragmentAt: - PRUint32 leftLength = mStrings[kLeftString]->Length(); + PRUint32 leftLength = mStrings[kFirstString]->Length(); if ( aPosition < leftLength ) - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); else { - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); aPosition -= leftLength; } break; @@ -98,15 +98,15 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF if ( !result ) { done = PR_FALSE; - if ( aRequest == kNextFragment && whichString == kLeftString ) + if ( aRequest == kNextFragment && whichString == kFirstString ) { aRequest = kFirstFragment; - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); } - else if ( aRequest == kPrevFragment && whichString == kRightString ) + else if ( aRequest == kPrevFragment && whichString == kLastString ) { aRequest = kLastFragment; - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); } else done = PR_TRUE; @@ -120,26 +120,26 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF PRUint32 nsDependentCConcatenation::Length() const { - return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length(); + return mStrings[kFirstString]->Length() + mStrings[kLastString]->Length(); } PRBool -nsDependentCConcatenation::IsDependentOn( const string_type& aString ) const +nsDependentCConcatenation::IsDependentOn( const abstract_string_type& aString ) const { - return mStrings[0]->IsDependentOn(aString) || mStrings[1]->IsDependentOn(aString); + return mStrings[kFirstString]->IsDependentOn(aString) || mStrings[kLastString]->IsDependentOn(aString); } #if 0 PRBool -nsDependentCConcatenation::PromisesExactly( const string_type& aString ) const +nsDependentCConcatenation::PromisesExactly( const abstract_string_type& aString ) const { // Not really like this, test for the empty string, etc - return mStrings[0] == &aString && !mStrings[1] || !mStrings[0] && mStrings[1] == &aString; + return mStrings[kFirstString] == &aString && !mStrings[kLastString] || !mStrings[kFirstString] && mStrings[kLastString] == &aString; } #endif -const char* -nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentCConcatenation::char_type* +nsDependentCConcatenation::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { int whichString; @@ -153,20 +153,20 @@ nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& a break; case kFirstFragment: - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); break; case kLastFragment: - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); break; case kFragmentAt: - PRUint32 leftLength = mStrings[kLeftString]->Length(); + PRUint32 leftLength = mStrings[kFirstString]->Length(); if ( aPosition < leftLength ) - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); else { - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); aPosition -= leftLength; } break; @@ -183,15 +183,15 @@ nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& a if ( !result ) { done = PR_FALSE; - if ( aRequest == kNextFragment && whichString == kLeftString ) + if ( aRequest == kNextFragment && whichString == kFirstString ) { aRequest = kFirstFragment; - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); } - else if ( aRequest == kPrevFragment && whichString == kRightString ) + else if ( aRequest == kPrevFragment && whichString == kLastString ) { aRequest = kLastFragment; - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); } else done = PR_TRUE; diff --git a/string/src/nsDependentSubstring.cpp b/string/src/nsDependentSubstring.cpp index b6dd27be36f..a857da7f8cf 100644 --- a/string/src/nsDependentSubstring.cpp +++ b/string/src/nsDependentSubstring.cpp @@ -29,8 +29,8 @@ nsDependentSubstring::Length() const return mLength; } -const PRUnichar* -nsDependentSubstring::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentSubstring::char_type* +nsDependentSubstring::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -50,7 +50,7 @@ nsDependentSubstring::GetReadableFragment( nsReadableFragment& aFragm // requests for |kNextFragment| or |kPrevFragment| are just relayed down into the string we're slicing - const PRUnichar* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); + const char_type* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); // If |GetReadableFragment| returns |0|, then we are off the string, the contents of the // fragment are garbage. @@ -80,8 +80,8 @@ nsDependentCSubstring::Length() const return mLength; } -const char* -nsDependentCSubstring::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentCSubstring::char_type* +nsDependentCSubstring::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -101,7 +101,7 @@ nsDependentCSubstring::GetReadableFragment( nsReadableFragment& aFragment, // requests for |kNextFragment| or |kPrevFragment| are just relayed down into the string we're slicing - const char* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); + const char_type* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); // If |GetReadableFragment| returns |0|, then we are off the string, the contents of the // fragment are garbage. diff --git a/string/src/nsFragmentedString.cpp b/string/src/nsFragmentedString.cpp index 42dd6aed379..e69de29bb2d 100755 --- a/string/src/nsFragmentedString.cpp +++ b/string/src/nsFragmentedString.cpp @@ -1,162 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* - * The contents of this file are subject to the Mozilla Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is Mozilla XPCOM. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 2000 Netscape Communications Corporation. All - * Rights Reserved. - * - * Original Author: - * Scott Collins - * - * Contributor(s): - */ - -#include "nsFragmentedString.h" - - -const PRUnichar* -nsFragmentedString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const - { - const nsSharedBufferList::Buffer* buffer = 0; - switch ( aRequest ) - { - case kPrevFragment: - buffer = NS_STATIC_CAST(const nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mPrev; - break; - - case kFirstFragment: - buffer = mBufferList.GetFirstBuffer(); - break; - - case kLastFragment: - buffer = mBufferList.GetLastBuffer(); - break; - - case kNextFragment: - buffer = NS_STATIC_CAST(const nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mNext; - break; - - case kFragmentAt: - // ...work... - break; - } - - if ( buffer ) - { - aFragment.mStart = buffer->DataStart(); - aFragment.mEnd = buffer->DataEnd(); - aFragment.mFragmentIdentifier = buffer; - return aFragment.mStart + aOffset; - } - - return 0; - } - - -PRUnichar* -nsFragmentedString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) - { - nsSharedBufferList::Buffer* buffer = 0; - switch ( aRequest ) - { - case kPrevFragment: - buffer = NS_STATIC_CAST(nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mPrev; - break; - - case kFirstFragment: - buffer = mBufferList.GetFirstBuffer(); - break; - - case kLastFragment: - buffer = mBufferList.GetLastBuffer(); - break; - - case kNextFragment: - buffer = NS_STATIC_CAST(nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mNext; - break; - - case kFragmentAt: - // ...work... - break; - } - - if ( buffer ) - { - aFragment.mStart = buffer->DataStart(); - aFragment.mEnd = buffer->DataEnd(); - aFragment.mFragmentIdentifier = buffer; - return aFragment.mStart + aOffset; - } - - return 0; - } - - /** - * ... - */ -PRUint32 -nsFragmentedString::Length() const - { - return PRUint32(mBufferList.GetDataLength()); - } - - /** - * |SetLength| - */ -void -nsFragmentedString::SetLength( PRUint32 aNewLength ) - { - // according to the current interpretation of |SetLength|, - // cut off characters from the end, or else add unitialized space to fill - - if ( aNewLength < PRUint32(mBufferList.GetDataLength()) ) - { -// if ( aNewLength ) - mBufferList.DiscardSuffix(mBufferList.GetDataLength()-aNewLength); -// else -// mBufferList.DestroyBuffers(); - } - -// temporarily... eliminate as soon as our munging routines don't need this form of |SetLength| - else if ( aNewLength > PRUint32(mBufferList.GetDataLength()) ) - { - size_t empty_space_to_add = aNewLength - mBufferList.GetDataLength(); - nsSharedBufferList::Buffer* new_buffer = nsSharedBufferList::NewSingleAllocationBuffer(0, 0, empty_space_to_add); - new_buffer->DataEnd(new_buffer->DataStart()+empty_space_to_add); - mBufferList.LinkBuffer(mBufferList.GetLastBuffer(), new_buffer, 0); - } - } - - -#if 0 - /** - * |SetCapacity|. - * - * If a client tries to increase the capacity of multi-fragment string, perhaps a single - * empty fragment of the appropriate size should be appended. - */ -void -nsFragmentedString::SetCapacity( PRUint32 aNewCapacity ) - { - if ( !aNewCapacity ) - { - // |SetCapacity(0)| is special and means ``release all storage''. - } - else if ( aNewCapacity > ... ) - { - - } - } -#endif diff --git a/string/src/nsPrintfCString.cpp b/string/src/nsPrintfCString.cpp index 17cc3f44c76..8588bfefc18 100755 --- a/string/src/nsPrintfCString.cpp +++ b/string/src/nsPrintfCString.cpp @@ -40,7 +40,7 @@ #include "prprf.h" -nsPrintfCString::nsPrintfCString( const char* format, ... ) +nsPrintfCString::nsPrintfCString( const char_type* format, ... ) : mStart(mLocalBuffer), mLength(0) { @@ -54,7 +54,7 @@ nsPrintfCString::nsPrintfCString( const char* format, ... ) va_end(ap); } -nsPrintfCString::nsPrintfCString( size_t n, const char* format, ... ) +nsPrintfCString::nsPrintfCString( size_t n, const char_type* format, ... ) : mStart(mLocalBuffer), mLength(0) { @@ -64,7 +64,7 @@ nsPrintfCString::nsPrintfCString( size_t n, const char* format, ... ) size_t logical_capacity = kLocalBufferSize; if ( n > logical_capacity ) { - char* nonlocal_buffer = new char[n]; + char_type* nonlocal_buffer = new char_type[n]; // if we got something, use it if ( nonlocal_buffer ) @@ -96,7 +96,7 @@ nsPrintfCString::Length() const #if 0 PRBool -nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest ) const +nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest ) const { switch ( aRequest ) { @@ -114,8 +114,8 @@ nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFra } } #else -const char* -nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPrintfCString::char_type* +nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { diff --git a/string/src/nsPromiseFlatString.cpp b/string/src/nsPromiseFlatString.cpp index 7d83c8e6859..907e5e64acb 100644 --- a/string/src/nsPromiseFlatString.cpp +++ b/string/src/nsPromiseFlatString.cpp @@ -24,7 +24,7 @@ #include "nsPromiseFlatString.h" -nsPromiseFlatString::nsPromiseFlatString( const nsPromiseFlatString& aOther ) +nsPromiseFlatString::nsPromiseFlatString( const self_type& aOther ) : mFlattenedString(aOther.mFlattenedString) { if ( aOther.mPromisedString == &aOther.mFlattenedString ) @@ -33,7 +33,7 @@ nsPromiseFlatString::nsPromiseFlatString( const nsPromiseFlatString& aOther ) mPromisedString = aOther.mPromisedString; } -nsPromiseFlatString::nsPromiseFlatString( const nsAString& aString ) +nsPromiseFlatString::nsPromiseFlatString( const abstract_string_type& aString ) { if ( aString.GetFlatBufferHandle() ) mPromisedString = NS_STATIC_CAST(const nsAFlatString*, &aString); @@ -44,31 +44,31 @@ nsPromiseFlatString::nsPromiseFlatString( const nsAString& aString ) } } -const nsBufferHandle* +const nsPromiseFlatString::buffer_handle_type* nsPromiseFlatString::GetFlatBufferHandle() const { return mPromisedString->GetFlatBufferHandle(); } -const nsBufferHandle* +const nsPromiseFlatString::buffer_handle_type* nsPromiseFlatString::GetBufferHandle() const { return mPromisedString->GetBufferHandle(); } -const nsSharedBufferHandle* +const nsPromiseFlatString::shared_buffer_handle_type* nsPromiseFlatString::GetSharedBufferHandle() const { return mPromisedString->GetSharedBufferHandle(); } PRBool -nsPromiseFlatString::IsDependentOn( const nsAString& aString ) const +nsPromiseFlatString::IsDependentOn( const abstract_string_type& aString ) const { return mPromisedString->IsDependentOn(aString); } -const PRUnichar* +const nsPromiseFlatString::char_type* nsPromiseFlatString::get() const { return mPromisedString->get(); @@ -80,15 +80,15 @@ nsPromiseFlatString::Length() const return mPromisedString->Length(); } -const PRUnichar* -nsPromiseFlatString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPromiseFlatString::char_type* +nsPromiseFlatString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { return mPromisedString->GetReadableFragment(aFragment, aRequest, aOffset); } -nsPromiseFlatCString::nsPromiseFlatCString( const nsPromiseFlatCString& aOther ) +nsPromiseFlatCString::nsPromiseFlatCString( const self_type& aOther ) : mFlattenedString(aOther.mFlattenedString) { if ( aOther.mPromisedString == &aOther.mFlattenedString ) @@ -97,7 +97,7 @@ nsPromiseFlatCString::nsPromiseFlatCString( const nsPromiseFlatCString& aOther ) mPromisedString = aOther.mPromisedString; } -nsPromiseFlatCString::nsPromiseFlatCString( const nsACString& aString ) +nsPromiseFlatCString::nsPromiseFlatCString( const abstract_string_type& aString ) { if ( aString.GetFlatBufferHandle() ) mPromisedString = NS_STATIC_CAST(const nsAFlatCString*, &aString); @@ -108,31 +108,31 @@ nsPromiseFlatCString::nsPromiseFlatCString( const nsACString& aString ) } } -const nsBufferHandle* +const nsPromiseFlatCString::buffer_handle_type* nsPromiseFlatCString::GetFlatBufferHandle() const { return mPromisedString->GetFlatBufferHandle(); } -const nsBufferHandle* +const nsPromiseFlatCString::buffer_handle_type* nsPromiseFlatCString::GetBufferHandle() const { return mPromisedString->GetBufferHandle(); } -const nsSharedBufferHandle* +const nsPromiseFlatCString::shared_buffer_handle_type* nsPromiseFlatCString::GetSharedBufferHandle() const { return mPromisedString->GetSharedBufferHandle(); } PRBool -nsPromiseFlatCString::IsDependentOn( const nsACString& aString ) const +nsPromiseFlatCString::IsDependentOn( const abstract_string_type& aString ) const { return mPromisedString->IsDependentOn(aString); } -const char* +const nsPromiseFlatCString::char_type* nsPromiseFlatCString::get() const { return mPromisedString->get(); @@ -144,8 +144,8 @@ nsPromiseFlatCString::Length() const return mPromisedString->Length(); } -const char* -nsPromiseFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPromiseFlatCString::char_type* +nsPromiseFlatCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { return mPromisedString->GetReadableFragment(aFragment, aRequest, aOffset); } diff --git a/string/src/nsSharableString.cpp b/string/src/nsSharableString.cpp index 063992bb305..66a4eb86577 100644 --- a/string/src/nsSharableString.cpp +++ b/string/src/nsSharableString.cpp @@ -27,30 +27,30 @@ // #include "nsBufferHandleUtils.h" void -nsSharableString::assign( const string_type& aReadable ) +nsSharableString::assign( const abstract_string_type& aReadable ) { - const nsSharedBufferHandle* handle = aReadable.GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle(); if ( !handle ) handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1)); mBuffer = handle; } -const nsSharedBufferHandle* +const nsSharableString::shared_buffer_handle_type* nsSharableString::GetSharedBufferHandle() const { return mBuffer.get(); } void -nsSharableCString::assign( const string_type& aReadable ) +nsSharableCString::assign( const abstract_string_type& aReadable ) { - const nsSharedBufferHandle* handle = aReadable.GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle(); if ( !handle ) handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1)); mBuffer = handle; } -const nsSharedBufferHandle* +const nsSharableCString::shared_buffer_handle_type* nsSharableCString::GetSharedBufferHandle() const { return mBuffer.get(); diff --git a/string/src/nsXPIDLString.cpp b/string/src/nsXPIDLString.cpp index a57e006d054..2ece11117e2 100644 --- a/string/src/nsXPIDLString.cpp +++ b/string/src/nsXPIDLString.cpp @@ -72,7 +72,7 @@ nsImportedStringHandle::RecalculateBoundaries() const #if DEBUG_STRING_STATS -const nsBufferHandle* +const nsXPIDLString::buffer_handle_type* nsXPIDLString::GetFlatBufferHandle() const { --sShareCount; @@ -80,7 +80,7 @@ nsXPIDLString::GetFlatBufferHandle() const } -const nsBufferHandle* +const nsXPIDLString::buffer_handle_type* nsXPIDLString::GetBufferHandle() const { --sShareCount; @@ -97,10 +97,10 @@ nsXPIDLString::DebugPrintStats( FILE* aOutFile ) #endif -const nsSharedBufferHandle* +const nsXPIDLString::shared_buffer_handle_type* nsXPIDLString::GetSharedBufferHandle() const { - const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); + const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); if ( answer && !answer->DataEnd() && answer->StorageStart() ) answer->RecalculateBoundaries(); @@ -112,10 +112,10 @@ nsXPIDLString::GetSharedBufferHandle() const } -PRUnichar** +nsXPIDLString::char_type** nsXPIDLString::PrepareForUseAsOutParam() { - nsImportedStringHandle* handle = new nsImportedStringHandle(); + nsImportedStringHandle* handle = new nsImportedStringHandle(); NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|."); mBuffer = handle; @@ -127,7 +127,7 @@ nsXPIDLString::PrepareForUseAsOutParam() #if DEBUG_STRING_STATS -const nsBufferHandle* +const nsXPIDLCString::buffer_handle_type* nsXPIDLCString::GetFlatBufferHandle() const { --sShareCount; @@ -135,7 +135,7 @@ nsXPIDLCString::GetFlatBufferHandle() const } -const nsBufferHandle* +const nsXPIDLCString::buffer_handle_type* nsXPIDLCString::GetBufferHandle() const { --sShareCount; @@ -152,10 +152,10 @@ nsXPIDLCString::DebugPrintStats( FILE* aOutFile ) #endif -const nsSharedBufferHandle* +const nsXPIDLCString::shared_buffer_handle_type* nsXPIDLCString::GetSharedBufferHandle() const { - const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); + const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); if ( answer && !answer->DataEnd() && answer->StorageStart() ) answer->RecalculateBoundaries(); @@ -167,10 +167,10 @@ nsXPIDLCString::GetSharedBufferHandle() const } -char** +nsXPIDLCString::char_type** nsXPIDLCString::PrepareForUseAsOutParam() { - nsImportedStringHandle* handle = new nsImportedStringHandle(); + nsImportedStringHandle* handle = new nsImportedStringHandle(); NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|."); mBuffer = handle; diff --git a/xpcom/string/public/nsAFlatString.h b/xpcom/string/public/nsAFlatString.h index c197bbf32ed..48c717efc6f 100644 --- a/xpcom/string/public/nsAFlatString.h +++ b/xpcom/string/public/nsAFlatString.h @@ -35,16 +35,16 @@ class NS_COM nsAFlatString { public: // don't really want this to be virtual, and won't after |obsolete_nsString| is really dead - virtual const PRUnichar* get() const; - PRUnichar operator[]( PRUint32 i ) const { return get()[ i ]; } - PRUnichar CharAt( PRUint32 ) const; + virtual const char_type* get() const; + char_type operator[]( PRUint32 i ) const { return get()[ i ]; } + char_type CharAt( PRUint32 ) const; virtual PRUint32 Length() const; // protected: // can't hide these (yet), since I call them from forwarding routines in |nsPromiseFlatString| public: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ); }; class NS_COM nsAFlatCString @@ -52,20 +52,20 @@ class NS_COM nsAFlatCString { public: // don't really want this to be virtual, and won't after |obsolete_nsCString| is really dead - virtual const char* get() const; - char operator[]( PRUint32 i ) const { return get()[ i ]; } - char CharAt( PRUint32 ) const; + virtual const char_type* get() const; + char_type operator[]( PRUint32 i ) const { return get()[ i ]; } + char_type CharAt( PRUint32 ) const; virtual PRUint32 Length() const; // protected: // can't hide these (yet), since I call them from forwarding routines in |nsPromiseFlatCString| public: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ); }; inline -PRUnichar +nsAFlatString::char_type nsAFlatString::CharAt( PRUint32 i ) const { NS_ASSERTION(i const_iterator; - typedef nsWritingIterator iterator; - - typedef PRUint32 size_type; - typedef PRUint32 index_type; - - + typedef PRUnichar char_type; + typedef char incompatible_char_type; + + typedef nsBufferHandle buffer_handle_type; + typedef nsConstBufferHandle const_buffer_handle_type; + typedef nsSharedBufferHandle shared_buffer_handle_type; + + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + + typedef nsAString self_type; + typedef nsAString abstract_string_type; + + typedef nsReadingIterator const_iterator; + typedef nsWritingIterator iterator; + + typedef nsAPromiseString promise_type; + + typedef PRUint32 size_type; + typedef PRUint32 index_type; + public: // nsAString(); // auto-generated default constructor OK (we're abstract anyway) // nsAString( const self_type& ); // auto-generated copy-constructor OK (again, only because we're abstract) virtual ~nsAString() { } // ...yes, I expect to be sub-classed - virtual PRUint32 GetImplementationFlags() const; - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual PRUint32 GetImplementationFlags() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; /** * |GetBufferHandle()| will return either |0|, or a reasonable pointer. @@ -95,7 +103,7 @@ class NS_COM nsAString virtual PRBool IsVoid() const; virtual void SetIsVoid( PRBool ); - + /** * |CharAt|, |operator[]|, |First()|, and |Last()| are not guaranteed to be constant-time operations. * These signatures should be pushed down into interfaces that guarantee flat allocation. @@ -285,25 +293,34 @@ class NS_COM nsAString // protected: public: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 = 0 ) const = 0; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 = 0 ) = 0; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 = 0 ) const = 0; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 = 0 ) = 0; virtual PRBool IsDependentOn( const self_type& aString ) const { return &aString == this; } }; class NS_COM nsACString { public: - typedef nsACString self_type; - typedef nsAPromiseCString promise_type; - typedef char char_type; - typedef PRUnichar incompatible_char_type; + typedef char char_type; + typedef PRUnichar incompatible_char_type; + typedef nsBufferHandle buffer_handle_type; + typedef nsConstBufferHandle const_buffer_handle_type; + typedef nsSharedBufferHandle shared_buffer_handle_type; - typedef nsReadingIterator const_iterator; - typedef nsWritingIterator iterator; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; - typedef PRUint32 size_type; - typedef PRUint32 index_type; + typedef nsACString self_type; + typedef nsACString abstract_string_type; + + typedef nsReadingIterator const_iterator; + typedef nsWritingIterator iterator; + + typedef nsAPromiseCString promise_type; + + typedef PRUint32 size_type; + typedef PRUint32 index_type; @@ -313,10 +330,10 @@ class NS_COM nsACString virtual ~nsACString() { } // ...yes, I expect to be sub-classed - virtual PRUint32 GetImplementationFlags() const; - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual PRUint32 GetImplementationFlags() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; /** * |GetBufferHandle()| will return either |0|, or a reasonable pointer. @@ -340,7 +357,7 @@ class NS_COM nsACString virtual PRBool IsVoid() const; virtual void SetIsVoid( PRBool ); - + /** * |CharAt|, |operator[]|, |First()|, and |Last()| are not guaranteed to be constant-time operations. * These signatures should be pushed down into interfaces that guarantee flat allocation. @@ -530,8 +547,8 @@ class NS_COM nsACString // protected: public: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 = 0 ) const = 0; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 = 0 ) = 0; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 = 0 ) const = 0; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 = 0 ) = 0; virtual PRBool IsDependentOn( const self_type& aString ) const { return &aString == this; } }; @@ -631,21 +648,23 @@ nsAString::EndWriting( iterator& aResult ) class NS_COM nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const = 0; + typedef nsAString::char_type char_type; + + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const = 0; }; class NS_COM nsDefaultStringComparator : public nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; class NS_COM nsCaseInsensitiveStringComparator : public nsStringComparator { public: - virtual int operator()( const PRUnichar*, const PRUnichar*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; NS_COM int Compare( const nsAString& lhs, const nsAString& rhs, const nsStringComparator& = nsDefaultStringComparator() ); @@ -760,21 +779,23 @@ nsACString::EndWriting( iterator& aResult ) class NS_COM nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const = 0; + typedef nsACString::char_type char_type; + + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const = 0; }; class NS_COM nsDefaultCStringComparator : public nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; class NS_COM nsCaseInsensitiveCStringComparator : public nsCStringComparator { public: - virtual int operator()( const char*, const char*, PRUint32 aLength ) const; + virtual int operator()( const char_type*, const char_type*, PRUint32 aLength ) const; }; NS_COM int Compare( const nsACString& lhs, const nsACString& rhs, const nsCStringComparator& = nsDefaultCStringComparator() ); diff --git a/xpcom/string/public/nsDependentConcatenation.h b/xpcom/string/public/nsDependentConcatenation.h index 7186c9ba997..090a7b634db 100644 --- a/xpcom/string/public/nsDependentConcatenation.h +++ b/xpcom/string/public/nsDependentConcatenation.h @@ -52,49 +52,46 @@ class NS_COM nsDependentConcatenation { public: typedef nsDependentConcatenation self_type; - typedef PRUnichar char_type; - typedef nsAString string_type; - typedef string_type::const_iterator const_iterator; protected: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } - enum { kLeftString, kRightString }; + enum { kFirstString, kLastString }; int - GetCurrentStringFromFragment( const nsReadableFragment& aFragment ) const + GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const { - return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString; + return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString; } int - SetLeftStringInFragment( nsReadableFragment& aFragment ) const + SetFirstStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask); - return kLeftString; + return kFirstString; } int - SetRightStringInFragment( nsReadableFragment& aFragment ) const + SetLastStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() | mFragmentIdentifierMask); - return kRightString; + return kLastString; } public: - nsDependentConcatenation( const string_type& aLeftString, const string_type& aRightString, PRUint32 aMask = 1 ) + nsDependentConcatenation( const abstract_string_type& aFirstString, const abstract_string_type& aLastString, PRUint32 aMask = 1 ) : mFragmentIdentifierMask(aMask) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } - nsDependentConcatenation( const self_type& aLeftString, const string_type& aRightString ) - : mFragmentIdentifierMask(aLeftString.mFragmentIdentifierMask<<1) + nsDependentConcatenation( const self_type& aFirstString, const abstract_string_type& aLastString ) + : mFragmentIdentifierMask(aFirstString.mFragmentIdentifierMask<<1) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } // nsDependentConcatenation( const self_type& ); // auto-generated copy-constructor should be OK @@ -107,10 +104,10 @@ class NS_COM nsDependentConcatenation public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& ) const; -// virtual PRBool PromisesExactly( const string_type& ) const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; +// virtual PRBool PromisesExactly( const abstract_string_type& ) const; -// const self_type operator+( const string_type& rhs ) const; +// const self_type operator+( const abstract_string_type& rhs ) const; PRUint32 GetFragmentIdentifierMask() const { return mFragmentIdentifierMask; } @@ -120,8 +117,8 @@ class NS_COM nsDependentConcatenation // which would break the algorithm for distributing bits in the fragment identifier private: - const string_type* mStrings[2]; - PRUint32 mFragmentIdentifierMask; + const abstract_string_type* mStrings[2]; + PRUint32 mFragmentIdentifierMask; }; class NS_COM nsDependentCConcatenation @@ -129,49 +126,46 @@ class NS_COM nsDependentCConcatenation { public: typedef nsDependentCConcatenation self_type; - typedef char char_type; - typedef nsACString string_type; - typedef string_type::const_iterator const_iterator; protected: - virtual const char_type* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char_type* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } - enum { kLeftString, kRightString }; + enum { kFirstString, kLastString }; int - GetCurrentStringFromFragment( const nsReadableFragment& aFragment ) const + GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const { - return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString; + return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString; } int - SetLeftStringInFragment( nsReadableFragment& aFragment ) const + SetFirstStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask); - return kLeftString; + return kFirstString; } int - SetRightStringInFragment( nsReadableFragment& aFragment ) const + SetLastStringInFragment( const_fragment_type& aFragment ) const { aFragment.SetID(aFragment.GetIDAsInt() | mFragmentIdentifierMask); - return kRightString; + return kLastString; } public: - nsDependentCConcatenation( const string_type& aLeftString, const string_type& aRightString, PRUint32 aMask = 1 ) + nsDependentCConcatenation( const abstract_string_type& aFirstString, const abstract_string_type& aLastString, PRUint32 aMask = 1 ) : mFragmentIdentifierMask(aMask) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } - nsDependentCConcatenation( const self_type& aLeftString, const string_type& aRightString ) - : mFragmentIdentifierMask(aLeftString.mFragmentIdentifierMask<<1) + nsDependentCConcatenation( const self_type& aFirstString, const abstract_string_type& aLastString ) + : mFragmentIdentifierMask(aFirstString.mFragmentIdentifierMask<<1) { - mStrings[kLeftString] = &aLeftString; - mStrings[kRightString] = &aRightString; + mStrings[kFirstString] = &aFirstString; + mStrings[kLastString] = &aLastString; } // nsDependentCConcatenation( const self_type& ); // auto-generated copy-constructor should be OK @@ -184,10 +178,10 @@ class NS_COM nsDependentCConcatenation public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& ) const; -// virtual PRBool PromisesExactly( const string_type& ) const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; +// virtual PRBool PromisesExactly( const abstract_string_type& ) const; -// const self_type operator+( const string_type& rhs ) const; +// const self_type operator+( const abstract_string_type& rhs ) const; PRUint32 GetFragmentIdentifierMask() const { return mFragmentIdentifierMask; } @@ -197,8 +191,8 @@ class NS_COM nsDependentCConcatenation // which would break the algorithm for distributing bits in the fragment identifier private: - const string_type* mStrings[2]; - PRUint32 mFragmentIdentifierMask; + const abstract_string_type* mStrings[2]; + PRUint32 mFragmentIdentifierMask; }; /* @@ -252,14 +246,14 @@ operator+( const nsACString& lhs, const nsACString& rhs ) #if 0 inline const nsDependentConcatenation -nsDependentConcatenation::operator+( const string_type& rhs ) const +nsDependentConcatenation::operator+( const abstract_string_type& rhs ) const { return nsDependentConcatenation(*this, rhs, mFragmentIdentifierMask<<1); } inline const nsDependentCConcatenation -nsDependentCConcatenation::operator+( const string_type& rhs ) const +nsDependentCConcatenation::operator+( const abstract_string_type& rhs ) const { return nsDependentCConcatenation(*this, rhs, mFragmentIdentifierMask<<1); } diff --git a/xpcom/string/public/nsDependentString.h b/xpcom/string/public/nsDependentString.h index 58822454167..f8d1703182d 100644 --- a/xpcom/string/public/nsDependentString.h +++ b/xpcom/string/public/nsDependentString.h @@ -46,22 +46,24 @@ class NS_COM nsDependentString : public nsAFlatString { public: + typedef nsDependentString self_type; + void - Rebind( const PRUnichar* aPtr ) + Rebind( const char_type* aPtr ) { mHandle.DataStart(aPtr); - mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); + mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); } void - Rebind( const PRUnichar* aStartPtr, const PRUnichar* aEndPtr ) + Rebind( const char_type* aStartPtr, const char_type* aEndPtr ) { mHandle.DataStart(aStartPtr); mHandle.DataEnd(aEndPtr); } void - Rebind( const PRUnichar* aPtr, PRUint32 aLength ) + Rebind( const char_type* aPtr, PRUint32 aLength ) { if ( aLength == PRUint32(-1) ) { @@ -72,23 +74,23 @@ class NS_COM nsDependentString Rebind(aPtr, aPtr+aLength); } - nsDependentString( const PRUnichar* aStartPtr, const PRUnichar* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } - nsDependentString( const PRUnichar* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } - explicit nsDependentString( const PRUnichar* aPtr ) { Rebind(aPtr); } + nsDependentString( const char_type* aStartPtr, const char_type* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } + nsDependentString( const char_type* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } + explicit nsDependentString( const char_type* aPtr ) { Rebind(aPtr); } - // nsDependentString( const nsDependentString& ); // auto-generated copy-constructor OK + // nsDependentString( const self_type& ); // auto-generated copy-constructor OK // ~nsDependentString(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentString& ); // we're immutable, so no copy-assignment operator + void operator=( const self_type& ); // we're immutable, so no copy-assignment operator public: - virtual const nsBufferHandle* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } - virtual const nsBufferHandle* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } + virtual const buffer_handle_type* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } + virtual const buffer_handle_type* GetBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } private: - nsConstBufferHandle mHandle; + const_buffer_handle_type mHandle; }; @@ -97,22 +99,24 @@ class NS_COM nsDependentCString : public nsAFlatCString { public: + typedef nsDependentCString self_type; + void - Rebind( const char* aPtr ) + Rebind( const char_type* aPtr ) { mHandle.DataStart(aPtr); - mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); + mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits::length(aPtr)) : 0); } void - Rebind( const char* aStartPtr, const char* aEndPtr ) + Rebind( const char_type* aStartPtr, const char_type* aEndPtr ) { mHandle.DataStart(aStartPtr); mHandle.DataEnd(aEndPtr); } void - Rebind( const char* aPtr, PRUint32 aLength ) + Rebind( const char_type* aPtr, PRUint32 aLength ) { if ( aLength == PRUint32(-1) ) { @@ -123,23 +127,23 @@ class NS_COM nsDependentCString Rebind(aPtr, aPtr+aLength); } - nsDependentCString( const char* aStartPtr, const char* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } - nsDependentCString( const char* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } - explicit nsDependentCString( const char* aPtr ) { Rebind(aPtr); } + nsDependentCString( const char_type* aStartPtr, const char_type* aEndPtr ) { Rebind(aStartPtr, aEndPtr); } + nsDependentCString( const char_type* aPtr, PRUint32 aLength ) { Rebind(aPtr, aLength); } + explicit nsDependentCString( const char_type* aPtr ) { Rebind(aPtr); } - // nsDependentCString( const nsDependentCString& ); // auto-generated copy-constructor OK - // ~nsDependentCString(); // auto-generated destructor OK + // nsDependentCString( const self_type& ); // auto-generated copy-constructor OK + // ~nsDependentCString(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentCString& ); // we're immutable, so no copy-assignment operator + void operator=( const self_type& ); // we're immutable, so no copy-assignment operator public: - virtual const nsBufferHandle* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } - virtual const nsBufferHandle* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle*, &mHandle); } + virtual const buffer_handle_type* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } + virtual const buffer_handle_type* GetBufferHandle() const { return NS_REINTERPRET_CAST(const buffer_handle_type*, &mHandle); } private: - nsConstBufferHandle mHandle; + const_buffer_handle_type mHandle; }; #endif /* !defined(nsDependentString_h___) */ diff --git a/xpcom/string/public/nsDependentSubstring.h b/xpcom/string/public/nsDependentSubstring.h index 2169831810d..c0ddc6a1112 100644 --- a/xpcom/string/public/nsDependentSubstring.h +++ b/xpcom/string/public/nsDependentSubstring.h @@ -49,15 +49,15 @@ class NS_COM nsDependentSubstring calls to |GetReadableFragment()|. */ { - typedef nsAString string_type; - typedef string_type::const_iterator const_iterator; + public: + typedef nsDependentSubstring self_type; protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } public: - nsDependentSubstring( const string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) + nsDependentSubstring( const abstract_string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), mStartPos( NS_MIN(aStartPos, aString.Length()) ), mLength( NS_MIN(aLength, aString.Length()-mStartPos) ) @@ -74,21 +74,21 @@ class NS_COM nsDependentSubstring mLength = Distance(aStart, aEnd); } - // nsDependentSubstring( const nsDependentSubstring& ); // auto-generated copy-constructor should be OK + // nsDependentSubstring( const self_type& ); // auto-generated copy-constructor should be OK // ~nsDependentSubstring(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentSubstring& ); // we're immutable, you can't assign into a substring + void operator=( const self_type& ); // we're immutable, you can't assign into a substring public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& aString ) const { return mString.IsDependentOn(aString); } + virtual PRBool IsDependentOn( const abstract_string_type& aString ) const { return mString.IsDependentOn(aString); } private: - const string_type& mString; - PRUint32 mStartPos; - PRUint32 mLength; + const abstract_string_type& mString; + PRUint32 mStartPos; + PRUint32 mLength; }; class NS_COM nsDependentCSubstring @@ -102,15 +102,15 @@ class NS_COM nsDependentCSubstring calls to |GetReadableFragment()|. */ { - typedef nsACString string_type; - typedef string_type::const_iterator const_iterator; + public: + typedef nsDependentCSubstring self_type; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } public: - nsDependentCSubstring( const string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) + nsDependentCSubstring( const abstract_string_type& aString, PRUint32 aStartPos, PRUint32 aLength ) : mString(aString), mStartPos( NS_MIN(aStartPos, aString.Length()) ), mLength( NS_MIN(aLength, aString.Length()-mStartPos) ) @@ -127,21 +127,21 @@ class NS_COM nsDependentCSubstring mLength = Distance(aStart, aEnd); } - // nsDependentCSubstring( const nsDependentCSubstring& ); // auto-generated copy-constructor should be OK + // nsDependentCSubstring( const self_type& ); // auto-generated copy-constructor should be OK // ~nsDependentCSubstring(); // auto-generated destructor OK private: // NOT TO BE IMPLEMENTED - void operator=( const nsDependentCSubstring& ); // we're immutable, you can't assign into a substring + void operator=( const self_type& ); // we're immutable, you can't assign into a substring public: virtual PRUint32 Length() const; - virtual PRBool IsDependentOn( const string_type& aString ) const { return mString.IsDependentOn(aString); } + virtual PRBool IsDependentOn( const abstract_string_type& aString ) const { return mString.IsDependentOn(aString); } private: - const string_type& mString; - PRUint32 mStartPos; - PRUint32 mLength; + const abstract_string_type& mString; + PRUint32 mStartPos; + PRUint32 mLength; }; diff --git a/xpcom/string/public/nsFragmentedString.h b/xpcom/string/public/nsFragmentedString.h index 3201a699d63..e69de29bb2d 100644 --- a/xpcom/string/public/nsFragmentedString.h +++ b/xpcom/string/public/nsFragmentedString.h @@ -1,69 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* - * The contents of this file are subject to the Mozilla Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is Mozilla XPCOM. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 2000 Netscape Communications Corporation. All - * Rights Reserved. - * - * Contributor(s): - * Scott Collins (original author) - * - */ - -#ifndef nsFragmentedString_h___ -#define nsFragmentedString_h___ - - // WORK IN PROGRESS - -#ifndef nsAString_h___ -#include "nsAString.h" -#endif - -#ifndef nsSharedBufferList_h___ -#include "nsSharedBufferList.h" -#endif - - -class nsFragmentedString - : public nsAString - /* - ... - */ - { - protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual PRUnichar* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ); - - public: - nsFragmentedString() { } - - virtual PRUint32 Length() const; - - virtual void SetLength( PRUint32 aNewLength ); - // virtual void SetCapacity( PRUint32 aNewCapacity ); - - // virtual void Cut( PRUint32 cutStart, PRUint32 cutLength ); - - protected: - // virtual void do_AssignFromReadable( const nsAString& ); - // virtual void do_AppendFromReadable( const nsAString& ); - // virtual void do_InsertFromReadable( const nsAString&, PRUint32 ); - // virtual void do_ReplaceFromReadable( PRUint32, PRUint32, const nsAString& ); - - private: - nsSharedBufferList mBufferList; - }; - -#endif // !defined(nsFragmentedString_h___) diff --git a/xpcom/string/public/nsLiteralString.h b/xpcom/string/public/nsLiteralString.h index 820d093415a..cfa8cb50a9d 100644 --- a/xpcom/string/public/nsLiteralString.h +++ b/xpcom/string/public/nsLiteralString.h @@ -36,28 +36,28 @@ #if 0 inline const nsDependentString -literal_string( const PRUnichar* aPtr ) +literal_string( const nsAString::char_type* aPtr ) { return nsDependentString(aPtr); } inline const nsDependentString -literal_string( const PRUnichar* aPtr, PRUint32 aLength ) +literal_string( const nsAString::char_type* aPtr, PRUint32 aLength ) { return nsDependentString(aPtr, aLength); } inline const nsDependentCString -literal_string( const char* aPtr ) +literal_string( const nsACString::char_type* aPtr ) { return nsDependentCString(aPtr); } inline const nsDependentCString -literal_string( const char* aPtr, PRUint32 aLength ) +literal_string( const nsACString::char_type* aPtr, PRUint32 aLength ) { return nsDependentCString(aPtr, aLength); } @@ -65,8 +65,8 @@ literal_string( const char* aPtr, PRUint32 aLength ) #ifdef HAVE_CPP_2BYTE_WCHAR_T #define NS_L(s) L##s - #define NS_MULTILINE_LITERAL_STRING(s) nsDependentString(NS_REINTERPRET_CAST(const PRUnichar*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) - #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s) nsDependentString n(NS_REINTERPRET_CAST(const PRUnichar*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) + #define NS_MULTILINE_LITERAL_STRING(s) nsDependentString(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) + #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s) nsDependentString n(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1)) #else #define NS_L(s) s #define NS_MULTILINE_LITERAL_STRING(s) NS_ConvertASCIItoUCS2(s, PRUint32(sizeof(s)-1)) diff --git a/xpcom/string/public/nsPrintfCString.h b/xpcom/string/public/nsPrintfCString.h index 8ef2c2466a0..680dea0551c 100755 --- a/xpcom/string/public/nsPrintfCString.h +++ b/xpcom/string/public/nsPrintfCString.h @@ -76,21 +76,21 @@ class NS_COM nsPrintfCString public: - explicit nsPrintfCString( const char* format, ... ); - nsPrintfCString( size_t n, const char* format, ...); + explicit nsPrintfCString( const char_type* format, ... ); + nsPrintfCString( size_t n, const char_type* format, ...); ~nsPrintfCString(); virtual PRUint32 Length() const; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; - virtual char* GetWritableFragment( nsWritableFragment&, nsFragmentRequest, PRUint32 ) { return 0; } -// virtual PRBool GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; + virtual char_type* GetWritableFragment( fragment_type&, nsFragmentRequest, PRUint32 ) { return 0; } +// virtual PRBool GetReadableFragment( const_fragment_type&, nsFragmentRequest ) const; private: - char* mStart; - PRUint32 mLength; - char mLocalBuffer[ kLocalBufferSize + 1 ]; + char_type* mStart; + PRUint32 mLength; + char_type mLocalBuffer[ kLocalBufferSize + 1 ]; }; #endif // !defined(nsPrintfCString_h___) diff --git a/xpcom/string/public/nsPromiseFlatString.h b/xpcom/string/public/nsPromiseFlatString.h index 53f2d44cf38..3c63bc20112 100644 --- a/xpcom/string/public/nsPromiseFlatString.h +++ b/xpcom/string/public/nsPromiseFlatString.h @@ -83,28 +83,31 @@ class NS_COM nsPromiseFlatString : public nsAFlatString /* , public nsAPromiseString */ { - friend const nsPromiseFlatString PromiseFlatString( const nsAString& ); + friend const nsPromiseFlatString PromiseFlatString( const abstract_string_type& ); public: - nsPromiseFlatString( const nsPromiseFlatString& ); + typedef nsPromiseFlatString self_type; + + public: + nsPromiseFlatString( const self_type& ); protected: nsPromiseFlatString() : mPromisedString(&mFlattenedString) { } - explicit nsPromiseFlatString( const nsAString& aString ); + explicit nsPromiseFlatString( const abstract_string_type& aString ); // things we want to forward to the string we are promising - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; - virtual PRBool IsDependentOn( const nsAString& ) const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; // things we are forwarding now, but won't when we finally fix obsolete/nsString et al public: - virtual const PRUnichar* get() const; + virtual const char_type* get() const; virtual PRUint32 Length() const; protected: - virtual const PRUnichar* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; private: @@ -119,33 +122,36 @@ class NS_COM nsPromiseFlatString class NS_COM nsPromiseFlatCString : public nsAFlatCString /* , public nsAPromiseCString */ { - friend const nsPromiseFlatCString PromiseFlatCString( const nsACString& ); + friend const nsPromiseFlatCString PromiseFlatCString( const abstract_string_type& ); public: - nsPromiseFlatCString( const nsPromiseFlatCString& ); + typedef nsPromiseFlatCString self_type; + + public: + nsPromiseFlatCString( const self_type& ); protected: nsPromiseFlatCString() : mPromisedString(&mFlattenedString) { } - explicit nsPromiseFlatCString( const nsACString& aString ); + explicit nsPromiseFlatCString( const abstract_string_type& aString ); // things we want to forward to the string we are promising - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; - virtual PRBool IsDependentOn( const nsACString& ) const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; + virtual PRBool IsDependentOn( const abstract_string_type& ) const; // things we are forwarding now, but won't when we finally fix obsolete/nsString et al public: - virtual const char* get() const; + virtual const char_type* get() const; virtual PRUint32 Length() const; protected: - virtual const char* GetReadableFragment( nsReadableFragment&, nsFragmentRequest, PRUint32 ) const; + virtual const char_type* GetReadableFragment( const_fragment_type&, nsFragmentRequest, PRUint32 ) const; private: // NOT TO BE IMPLEMENTED - void operator=( const nsPromiseFlatCString& ); + void operator=( const self_type& ); private: nsSharableCString mFlattenedString; diff --git a/xpcom/string/public/nsSharableString.h b/xpcom/string/public/nsSharableString.h index 9fec3209445..c962b2d0ba3 100644 --- a/xpcom/string/public/nsSharableString.h +++ b/xpcom/string/public/nsSharableString.h @@ -46,25 +46,23 @@ class NS_COM nsSharableString { public: typedef nsSharableString self_type; - typedef PRUnichar char_type; - typedef nsAString string_type; public: nsSharableString() { } nsSharableString( const self_type& aOther ) : mBuffer(aOther.mBuffer) { } - explicit nsSharableString( const string_type& aReadable ) { assign(aReadable); } - explicit nsSharableString( const nsSharedBufferHandle* aHandle ) : mBuffer(aHandle) { } + explicit nsSharableString( const abstract_string_type& aReadable ) { assign(aReadable); } + explicit nsSharableString( const shared_buffer_handle_type* aHandle ) : mBuffer(aHandle) { } self_type& - operator=( const string_type& aReadable ) + operator=( const abstract_string_type& aReadable ) { assign(aReadable); return *this; } protected: - void assign( const string_type& ); - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + void assign( const abstract_string_type& ); + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; protected: nsAutoBufferHandle mBuffer; @@ -76,25 +74,23 @@ class NS_COM nsSharableCString { public: typedef nsSharableCString self_type; - typedef char char_type; - typedef nsACString string_type; public: nsSharableCString() { } nsSharableCString( const self_type& aOther ) : mBuffer(aOther.mBuffer) { } - explicit nsSharableCString( const string_type& aReadable ) { assign(aReadable); } - explicit nsSharableCString( const nsSharedBufferHandle* aHandle ) : mBuffer(aHandle) { } + explicit nsSharableCString( const abstract_string_type& aReadable ) { assign(aReadable); } + explicit nsSharableCString( const shared_buffer_handle_type* aHandle ) : mBuffer(aHandle) { } self_type& - operator=( const string_type& aReadable ) + operator=( const abstract_string_type& aReadable ) { assign(aReadable); return *this; } protected: - void assign( const string_type& ); - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + void assign( const abstract_string_type& ); + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; protected: nsAutoBufferHandle mBuffer; diff --git a/xpcom/string/public/nsStringIterator.h b/xpcom/string/public/nsStringIterator.h index 2305e232dc4..abe2309b7e1 100644 --- a/xpcom/string/public/nsStringIterator.h +++ b/xpcom/string/public/nsStringIterator.h @@ -63,14 +63,17 @@ class nsReadingIterator typedef const CharT& reference; // typedef bidirectional_iterator_tag iterator_category; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + private: friend class nsAString; friend class nsACString; - typedef typename nsStringTraits::abstract_string_type string_type; + typedef typename nsStringTraits::abstract_string_type abstract_string_type; - nsReadableFragment mFragment; + const_fragment_type mFragment; const CharT* mPosition; - const string_type* mOwningString; + const abstract_string_type* mOwningString; public: nsReadingIterator() { } @@ -136,13 +139,13 @@ class nsReadingIterator return result; } - const nsReadableFragment& + const const_fragment_type& fragment() const { return mFragment; } - const string_type& + const abstract_string_type& string() const { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); @@ -203,14 +206,17 @@ class nsWritingIterator typedef CharT& reference; // typedef bidirectional_iterator_tag iterator_category; + typedef nsReadableFragment const_fragment_type; + typedef nsWritableFragment fragment_type; + private: friend class nsAString; friend class nsACString; - typedef typename nsStringTraits::abstract_string_type string_type; + typedef typename nsStringTraits::abstract_string_type abstract_string_type; - nsWritableFragment mFragment; + fragment_type mFragment; CharT* mPosition; - string_type* mOwningString; + abstract_string_type* mOwningString; public: nsWritingIterator() { } @@ -276,26 +282,26 @@ class nsWritingIterator return result; } - const nsWritableFragment& + const fragment_type& fragment() const { return mFragment; } - nsWritableFragment& + fragment_type& fragment() { return mFragment; } - const string_type& + const abstract_string_type& string() const { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); return *mOwningString; } - string_type& + abstract_string_type& string() { NS_ASSERTION(mOwningString, "iterator not attached to a string (|mOwningString| == 0)"); diff --git a/xpcom/string/public/nsXPIDLString.h b/xpcom/string/public/nsXPIDLString.h index 53bcd878538..5834da348dd 100644 --- a/xpcom/string/public/nsXPIDLString.h +++ b/xpcom/string/public/nsXPIDLString.h @@ -70,6 +70,9 @@ class NS_COM nsXPIDLString : public nsSharableString { + public: + typedef nsXPIDLString self_type; + public: nsXPIDLString() { @@ -80,7 +83,7 @@ class NS_COM nsXPIDLString #endif } - nsXPIDLString( const nsXPIDLString& aString ) + nsXPIDLString( const self_type& aString ) : nsSharableString(aString.GetSharedBufferHandle()) // copy-constructor required (or else C++ generates one for us) { @@ -98,8 +101,8 @@ class NS_COM nsXPIDLString } #endif - nsXPIDLString& - operator=( const nsXPIDLString& rhs ) + self_type& + operator=( const self_type& rhs ) // copy-assignment operator required (or else C++ generates one for us) { // self-assignment is handled by the underlying |nsAutoBufferHandle| @@ -107,11 +110,11 @@ class NS_COM nsXPIDLString return *this; } - void Adopt( PRUnichar* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } + void Adopt( char_type* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } // deprecated, to be eliminated - operator const PRUnichar*() const { return get(); } - PRUnichar operator[]( int i ) const { return get()[ i ]; } + operator const char_type*() const { return get(); } + char_type operator[]( int i ) const { return get()[ i ]; } class getter_Copies_t @@ -121,7 +124,7 @@ class NS_COM nsXPIDLString // getter_Copies_t( const getter_Copies_t& ); // auto-generated copy-constructor OK // getter_Copies_t& operator=( const getter_Copies_t& ); // auto-generated assignment operator OK - operator PRUnichar**() const { return mString->PrepareForUseAsOutParam(); } + operator char_type**() const { return mString->PrepareForUseAsOutParam(); } private: nsXPIDLString* mString; @@ -131,13 +134,13 @@ class NS_COM nsXPIDLString protected: #if DEBUG_STRING_STATS - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; #endif - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; // overridden to fix the length after `out' parameter assignment, if necessary - PRUnichar** PrepareForUseAsOutParam(); + char_type** PrepareForUseAsOutParam(); #if DEBUG_STRING_STATS static size_t sCreatedCount; // total number of |nsXPIDLString|s ever created @@ -164,6 +167,9 @@ getter_Copies( nsXPIDLString& aString ) class NS_COM nsXPIDLCString : public nsSharableCString { + public: + typedef nsXPIDLCString self_type; + public: nsXPIDLCString() { @@ -174,7 +180,7 @@ class NS_COM nsXPIDLCString #endif } - nsXPIDLCString( const nsXPIDLCString& aString ) + nsXPIDLCString( const self_type& aString ) : nsSharableCString(aString.GetSharedBufferHandle()) // copy-constructor required (or else C++ generates one for us) { @@ -192,8 +198,8 @@ class NS_COM nsXPIDLCString } #endif - nsXPIDLCString& - operator=( const nsXPIDLCString& rhs ) + self_type& + operator=( const self_type& rhs ) // copy-assignment operator required (or else C++ generates one for us) { // self-assignment is handled by the underlying |nsAutoBufferHandle| @@ -201,11 +207,11 @@ class NS_COM nsXPIDLCString return *this; } - void Adopt( char* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } + void Adopt( char_type* aNewValue ) { *PrepareForUseAsOutParam() = aNewValue; } // deprecated, to be eliminated - operator const char*() const { return get(); } - char operator[]( int i ) const { return get()[ i ]; } + operator const char_type*() const { return get(); } + char_type operator[]( int i ) const { return get()[ i ]; } class getter_Copies_t @@ -215,7 +221,7 @@ class NS_COM nsXPIDLCString // getter_Copies_t( const getter_Copies_t& ); // auto-generated copy-constructor OK // getter_Copies_t& operator=( const getter_Copies_t& ); // auto-generated assignment operator OK - operator char**() const { return mString->PrepareForUseAsOutParam(); } + operator char_type**() const { return mString->PrepareForUseAsOutParam(); } private: nsXPIDLCString* mString; @@ -225,13 +231,13 @@ class NS_COM nsXPIDLCString protected: #if DEBUG_STRING_STATS - virtual const nsBufferHandle* GetFlatBufferHandle() const; - virtual const nsBufferHandle* GetBufferHandle() const; + virtual const buffer_handle_type* GetFlatBufferHandle() const; + virtual const buffer_handle_type* GetBufferHandle() const; #endif - virtual const nsSharedBufferHandle* GetSharedBufferHandle() const; + virtual const shared_buffer_handle_type* GetSharedBufferHandle() const; // overridden to fix the length after `out' parameter assignment, if necessary - char** PrepareForUseAsOutParam(); + char_type** PrepareForUseAsOutParam(); #if DEBUG_STRING_STATS static size_t sCreatedCount; // total number of |nsXPIDLCString|s ever created diff --git a/xpcom/string/src/nsAFlatString.cpp b/xpcom/string/src/nsAFlatString.cpp index d9f7b1607a8..c8bd447e557 100644 --- a/xpcom/string/src/nsAFlatString.cpp +++ b/xpcom/string/src/nsAFlatString.cpp @@ -23,8 +23,8 @@ #include "nsAFlatString.h" -const PRUnichar* -nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsAFlatString::char_type* +nsAFlatString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -32,7 +32,7 @@ nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, ns case kLastFragment: case kFragmentAt: { - const nsBufferHandle* buffer = GetBufferHandle(); + const buffer_handle_type* buffer = GetBufferHandle(); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -46,8 +46,8 @@ nsAFlatString::GetReadableFragment( nsReadableFragment& aFragment, ns } } -PRUnichar* -nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) +nsAFlatString::char_type* +nsAFlatString::GetWritableFragment( fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { @@ -55,7 +55,7 @@ nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, ns case kLastFragment: case kFragmentAt: { - nsBufferHandle* buffer = NS_CONST_CAST(nsBufferHandle*, GetBufferHandle()); + buffer_handle_type* buffer = NS_CONST_CAST(buffer_handle_type*, GetBufferHandle()); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -69,8 +69,8 @@ nsAFlatString::GetWritableFragment( nsWritableFragment& aFragment, ns } } -const char* -nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsAFlatCString::char_type* +nsAFlatCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { @@ -78,7 +78,7 @@ nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFrag case kLastFragment: case kFragmentAt: { - const nsBufferHandle* buffer = GetBufferHandle(); + const buffer_handle_type* buffer = GetBufferHandle(); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -92,8 +92,8 @@ nsAFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFrag } } -char* -nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) +nsAFlatCString::char_type* +nsAFlatCString::GetWritableFragment( fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) { switch ( aRequest ) { @@ -101,7 +101,7 @@ nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFrag case kLastFragment: case kFragmentAt: { - nsBufferHandle* buffer = NS_CONST_CAST(nsBufferHandle*, GetBufferHandle()); + buffer_handle_type* buffer = NS_CONST_CAST(buffer_handle_type*, GetBufferHandle()); NS_ASSERTION(buffer, "trouble: no buffer!"); aFragment.mEnd = buffer->DataEnd(); @@ -118,29 +118,29 @@ nsAFlatCString::GetWritableFragment( nsWritableFragment& aFragment, nsFrag PRUint32 nsAFlatString::Length() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); return PRUint32(handle ? handle->DataLength() : 0); } PRUint32 nsAFlatCString::Length() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); return PRUint32(handle ? handle->DataLength() : 0); } -const PRUnichar* +const nsAFlatString::char_type* nsAFlatString::get() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); // NS_ASSERTION(handle, "handle is null!"); return handle ? handle->DataStart() : 0; } -const char* +const nsAFlatCString::char_type* nsAFlatCString::get() const { - const nsBufferHandle* handle = GetBufferHandle(); + const buffer_handle_type* handle = GetBufferHandle(); // NS_ASSERTION(handle, "handle is null!"); return handle ? handle->DataStart() : 0; } diff --git a/xpcom/string/src/nsAString.cpp b/xpcom/string/src/nsAString.cpp index 912c4aada74..d2fbe279f8d 100644 --- a/xpcom/string/src/nsAString.cpp +++ b/xpcom/string/src/nsAString.cpp @@ -28,13 +28,13 @@ int -nsDefaultStringComparator::operator()( const PRUnichar* lhs, const PRUnichar* rhs, PRUint32 aLength ) const +nsDefaultStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { - return nsCharTraits::compare(lhs, rhs, aLength); + return nsCharTraits::compare(lhs, rhs, aLength); } int -nsCaseInsensitiveStringComparator::operator()( const PRUnichar* lhs, const PRUnichar* rhs, PRUint32 aLength ) const +nsCaseInsensitiveStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { return nsCRT::strncasecmp(lhs, rhs, aLength); } @@ -85,20 +85,19 @@ Compare( const nsAString& lhs, const nsAString& rhs, const nsStringComparator& a return 0; } - -const nsSharedBufferHandle* +const nsAString::shared_buffer_handle_type* nsAString::GetSharedBufferHandle() const { return 0; } -const nsBufferHandle* +const nsAString::buffer_handle_type* nsAString::GetFlatBufferHandle() const { return GetSharedBufferHandle(); } -const nsBufferHandle* +const nsAString::buffer_handle_type* nsAString::GetBufferHandle() const { return GetSharedBufferHandle(); @@ -108,12 +107,13 @@ PRUint32 nsAString::GetImplementationFlags() const { PRUint32 flags = 0; - const nsSharedBufferHandle* handle = GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = GetSharedBufferHandle(); if ( handle ) flags = handle->GetImplementationFlags(); return flags; } + PRBool nsAString::IsVoid() const { @@ -132,6 +132,8 @@ nsAString::Equals( const char_type* rhs ) const return Equals(nsDependentString(rhs)); } + + nsAString::char_type nsAString::First() const { @@ -529,16 +531,14 @@ nsAString::do_ReplaceFromReadable( index_type cutStart, size_type cutLength, con } - - int -nsDefaultCStringComparator::operator()( const char* lhs, const char* rhs, PRUint32 aLength ) const +nsDefaultCStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { - return nsCharTraits::compare(lhs, rhs, aLength); + return nsCharTraits::compare(lhs, rhs, aLength); } int -nsCaseInsensitiveCStringComparator::operator()( const char* lhs, const char* rhs, PRUint32 aLength ) const +nsCaseInsensitiveCStringComparator::operator()( const char_type* lhs, const char_type* rhs, PRUint32 aLength ) const { return nsCRT::strncasecmp(lhs, rhs, aLength); } @@ -589,20 +589,19 @@ Compare( const nsACString& lhs, const nsACString& rhs, const nsCStringComparator return 0; } - -const nsSharedBufferHandle* +const nsACString::shared_buffer_handle_type* nsACString::GetSharedBufferHandle() const { return 0; } -const nsBufferHandle* +const nsACString::buffer_handle_type* nsACString::GetFlatBufferHandle() const { return GetSharedBufferHandle(); } -const nsBufferHandle* +const nsACString::buffer_handle_type* nsACString::GetBufferHandle() const { return GetSharedBufferHandle(); @@ -612,12 +611,13 @@ PRUint32 nsACString::GetImplementationFlags() const { PRUint32 flags = 0; - const nsSharedBufferHandle* handle = GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = GetSharedBufferHandle(); if ( handle ) flags = handle->GetImplementationFlags(); return flags; } + PRBool nsACString::IsVoid() const { diff --git a/xpcom/string/src/nsDependentConcatenation.cpp b/xpcom/string/src/nsDependentConcatenation.cpp index 58b549b2f8a..f9ecc3b84d2 100644 --- a/xpcom/string/src/nsDependentConcatenation.cpp +++ b/xpcom/string/src/nsDependentConcatenation.cpp @@ -35,26 +35,26 @@ PRUint32 nsDependentConcatenation::Length() const { - return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length(); + return mStrings[kFirstString]->Length() + mStrings[kLastString]->Length(); } PRBool -nsDependentConcatenation::IsDependentOn( const string_type& aString ) const +nsDependentConcatenation::IsDependentOn( const abstract_string_type& aString ) const { - return mStrings[0]->IsDependentOn(aString) || mStrings[1]->IsDependentOn(aString); + return mStrings[kFirstString]->IsDependentOn(aString) || mStrings[kLastString]->IsDependentOn(aString); } #if 0 PRBool -nsDependentConcatenation::PromisesExactly( const string_type& aString ) const +nsDependentConcatenation::PromisesExactly( const abstract_string_type& aString ) const { // Not really like this, test for the empty string, etc - return mStrings[0] == &aString && !mStrings[1] || !mStrings[0] && mStrings[1] == &aString; + return mStrings[kFirstString] == &aString && !mStrings[kLastString] || !mStrings[kFirstString] && mStrings[kLastString] == &aString; } #endif -const PRUnichar* -nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentConcatenation::char_type* +nsDependentConcatenation::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { int whichString; @@ -68,20 +68,20 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF break; case kFirstFragment: - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); break; case kLastFragment: - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); break; case kFragmentAt: - PRUint32 leftLength = mStrings[kLeftString]->Length(); + PRUint32 leftLength = mStrings[kFirstString]->Length(); if ( aPosition < leftLength ) - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); else { - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); aPosition -= leftLength; } break; @@ -98,15 +98,15 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF if ( !result ) { done = PR_FALSE; - if ( aRequest == kNextFragment && whichString == kLeftString ) + if ( aRequest == kNextFragment && whichString == kFirstString ) { aRequest = kFirstFragment; - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); } - else if ( aRequest == kPrevFragment && whichString == kRightString ) + else if ( aRequest == kPrevFragment && whichString == kLastString ) { aRequest = kLastFragment; - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); } else done = PR_TRUE; @@ -120,26 +120,26 @@ nsDependentConcatenation::GetReadableFragment( nsReadableFragment& aF PRUint32 nsDependentCConcatenation::Length() const { - return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length(); + return mStrings[kFirstString]->Length() + mStrings[kLastString]->Length(); } PRBool -nsDependentCConcatenation::IsDependentOn( const string_type& aString ) const +nsDependentCConcatenation::IsDependentOn( const abstract_string_type& aString ) const { - return mStrings[0]->IsDependentOn(aString) || mStrings[1]->IsDependentOn(aString); + return mStrings[kFirstString]->IsDependentOn(aString) || mStrings[kLastString]->IsDependentOn(aString); } #if 0 PRBool -nsDependentCConcatenation::PromisesExactly( const string_type& aString ) const +nsDependentCConcatenation::PromisesExactly( const abstract_string_type& aString ) const { // Not really like this, test for the empty string, etc - return mStrings[0] == &aString && !mStrings[1] || !mStrings[0] && mStrings[1] == &aString; + return mStrings[kFirstString] == &aString && !mStrings[kLastString] || !mStrings[kFirstString] && mStrings[kLastString] == &aString; } #endif -const char* -nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentCConcatenation::char_type* +nsDependentCConcatenation::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { int whichString; @@ -153,20 +153,20 @@ nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& a break; case kFirstFragment: - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); break; case kLastFragment: - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); break; case kFragmentAt: - PRUint32 leftLength = mStrings[kLeftString]->Length(); + PRUint32 leftLength = mStrings[kFirstString]->Length(); if ( aPosition < leftLength ) - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); else { - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); aPosition -= leftLength; } break; @@ -183,15 +183,15 @@ nsDependentCConcatenation::GetReadableFragment( nsReadableFragment& a if ( !result ) { done = PR_FALSE; - if ( aRequest == kNextFragment && whichString == kLeftString ) + if ( aRequest == kNextFragment && whichString == kFirstString ) { aRequest = kFirstFragment; - whichString = SetRightStringInFragment(aFragment); + whichString = SetLastStringInFragment(aFragment); } - else if ( aRequest == kPrevFragment && whichString == kRightString ) + else if ( aRequest == kPrevFragment && whichString == kLastString ) { aRequest = kLastFragment; - whichString = SetLeftStringInFragment(aFragment); + whichString = SetFirstStringInFragment(aFragment); } else done = PR_TRUE; diff --git a/xpcom/string/src/nsDependentSubstring.cpp b/xpcom/string/src/nsDependentSubstring.cpp index b6dd27be36f..a857da7f8cf 100644 --- a/xpcom/string/src/nsDependentSubstring.cpp +++ b/xpcom/string/src/nsDependentSubstring.cpp @@ -29,8 +29,8 @@ nsDependentSubstring::Length() const return mLength; } -const PRUnichar* -nsDependentSubstring::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentSubstring::char_type* +nsDependentSubstring::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -50,7 +50,7 @@ nsDependentSubstring::GetReadableFragment( nsReadableFragment& aFragm // requests for |kNextFragment| or |kPrevFragment| are just relayed down into the string we're slicing - const PRUnichar* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); + const char_type* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); // If |GetReadableFragment| returns |0|, then we are off the string, the contents of the // fragment are garbage. @@ -80,8 +80,8 @@ nsDependentCSubstring::Length() const return mLength; } -const char* -nsDependentCSubstring::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const +const nsDependentCSubstring::char_type* +nsDependentCSubstring::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const { // Offset any request for a specific position (First, Last, At) by our // substrings startpos within the owning string @@ -101,7 +101,7 @@ nsDependentCSubstring::GetReadableFragment( nsReadableFragment& aFragment, // requests for |kNextFragment| or |kPrevFragment| are just relayed down into the string we're slicing - const char* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); + const char_type* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition); // If |GetReadableFragment| returns |0|, then we are off the string, the contents of the // fragment are garbage. diff --git a/xpcom/string/src/nsFragmentedString.cpp b/xpcom/string/src/nsFragmentedString.cpp index 42dd6aed379..e69de29bb2d 100755 --- a/xpcom/string/src/nsFragmentedString.cpp +++ b/xpcom/string/src/nsFragmentedString.cpp @@ -1,162 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* - * The contents of this file are subject to the Mozilla Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is Mozilla XPCOM. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 2000 Netscape Communications Corporation. All - * Rights Reserved. - * - * Original Author: - * Scott Collins - * - * Contributor(s): - */ - -#include "nsFragmentedString.h" - - -const PRUnichar* -nsFragmentedString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const - { - const nsSharedBufferList::Buffer* buffer = 0; - switch ( aRequest ) - { - case kPrevFragment: - buffer = NS_STATIC_CAST(const nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mPrev; - break; - - case kFirstFragment: - buffer = mBufferList.GetFirstBuffer(); - break; - - case kLastFragment: - buffer = mBufferList.GetLastBuffer(); - break; - - case kNextFragment: - buffer = NS_STATIC_CAST(const nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mNext; - break; - - case kFragmentAt: - // ...work... - break; - } - - if ( buffer ) - { - aFragment.mStart = buffer->DataStart(); - aFragment.mEnd = buffer->DataEnd(); - aFragment.mFragmentIdentifier = buffer; - return aFragment.mStart + aOffset; - } - - return 0; - } - - -PRUnichar* -nsFragmentedString::GetWritableFragment( nsWritableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) - { - nsSharedBufferList::Buffer* buffer = 0; - switch ( aRequest ) - { - case kPrevFragment: - buffer = NS_STATIC_CAST(nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mPrev; - break; - - case kFirstFragment: - buffer = mBufferList.GetFirstBuffer(); - break; - - case kLastFragment: - buffer = mBufferList.GetLastBuffer(); - break; - - case kNextFragment: - buffer = NS_STATIC_CAST(nsSharedBufferList::Buffer*, aFragment.mFragmentIdentifier)->mNext; - break; - - case kFragmentAt: - // ...work... - break; - } - - if ( buffer ) - { - aFragment.mStart = buffer->DataStart(); - aFragment.mEnd = buffer->DataEnd(); - aFragment.mFragmentIdentifier = buffer; - return aFragment.mStart + aOffset; - } - - return 0; - } - - /** - * ... - */ -PRUint32 -nsFragmentedString::Length() const - { - return PRUint32(mBufferList.GetDataLength()); - } - - /** - * |SetLength| - */ -void -nsFragmentedString::SetLength( PRUint32 aNewLength ) - { - // according to the current interpretation of |SetLength|, - // cut off characters from the end, or else add unitialized space to fill - - if ( aNewLength < PRUint32(mBufferList.GetDataLength()) ) - { -// if ( aNewLength ) - mBufferList.DiscardSuffix(mBufferList.GetDataLength()-aNewLength); -// else -// mBufferList.DestroyBuffers(); - } - -// temporarily... eliminate as soon as our munging routines don't need this form of |SetLength| - else if ( aNewLength > PRUint32(mBufferList.GetDataLength()) ) - { - size_t empty_space_to_add = aNewLength - mBufferList.GetDataLength(); - nsSharedBufferList::Buffer* new_buffer = nsSharedBufferList::NewSingleAllocationBuffer(0, 0, empty_space_to_add); - new_buffer->DataEnd(new_buffer->DataStart()+empty_space_to_add); - mBufferList.LinkBuffer(mBufferList.GetLastBuffer(), new_buffer, 0); - } - } - - -#if 0 - /** - * |SetCapacity|. - * - * If a client tries to increase the capacity of multi-fragment string, perhaps a single - * empty fragment of the appropriate size should be appended. - */ -void -nsFragmentedString::SetCapacity( PRUint32 aNewCapacity ) - { - if ( !aNewCapacity ) - { - // |SetCapacity(0)| is special and means ``release all storage''. - } - else if ( aNewCapacity > ... ) - { - - } - } -#endif diff --git a/xpcom/string/src/nsPrintfCString.cpp b/xpcom/string/src/nsPrintfCString.cpp index 17cc3f44c76..8588bfefc18 100755 --- a/xpcom/string/src/nsPrintfCString.cpp +++ b/xpcom/string/src/nsPrintfCString.cpp @@ -40,7 +40,7 @@ #include "prprf.h" -nsPrintfCString::nsPrintfCString( const char* format, ... ) +nsPrintfCString::nsPrintfCString( const char_type* format, ... ) : mStart(mLocalBuffer), mLength(0) { @@ -54,7 +54,7 @@ nsPrintfCString::nsPrintfCString( const char* format, ... ) va_end(ap); } -nsPrintfCString::nsPrintfCString( size_t n, const char* format, ... ) +nsPrintfCString::nsPrintfCString( size_t n, const char_type* format, ... ) : mStart(mLocalBuffer), mLength(0) { @@ -64,7 +64,7 @@ nsPrintfCString::nsPrintfCString( size_t n, const char* format, ... ) size_t logical_capacity = kLocalBufferSize; if ( n > logical_capacity ) { - char* nonlocal_buffer = new char[n]; + char_type* nonlocal_buffer = new char_type[n]; // if we got something, use it if ( nonlocal_buffer ) @@ -96,7 +96,7 @@ nsPrintfCString::Length() const #if 0 PRBool -nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest ) const +nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest ) const { switch ( aRequest ) { @@ -114,8 +114,8 @@ nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFra } } #else -const char* -nsPrintfCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPrintfCString::char_type* +nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { switch ( aRequest ) { diff --git a/xpcom/string/src/nsPromiseFlatString.cpp b/xpcom/string/src/nsPromiseFlatString.cpp index 7d83c8e6859..907e5e64acb 100644 --- a/xpcom/string/src/nsPromiseFlatString.cpp +++ b/xpcom/string/src/nsPromiseFlatString.cpp @@ -24,7 +24,7 @@ #include "nsPromiseFlatString.h" -nsPromiseFlatString::nsPromiseFlatString( const nsPromiseFlatString& aOther ) +nsPromiseFlatString::nsPromiseFlatString( const self_type& aOther ) : mFlattenedString(aOther.mFlattenedString) { if ( aOther.mPromisedString == &aOther.mFlattenedString ) @@ -33,7 +33,7 @@ nsPromiseFlatString::nsPromiseFlatString( const nsPromiseFlatString& aOther ) mPromisedString = aOther.mPromisedString; } -nsPromiseFlatString::nsPromiseFlatString( const nsAString& aString ) +nsPromiseFlatString::nsPromiseFlatString( const abstract_string_type& aString ) { if ( aString.GetFlatBufferHandle() ) mPromisedString = NS_STATIC_CAST(const nsAFlatString*, &aString); @@ -44,31 +44,31 @@ nsPromiseFlatString::nsPromiseFlatString( const nsAString& aString ) } } -const nsBufferHandle* +const nsPromiseFlatString::buffer_handle_type* nsPromiseFlatString::GetFlatBufferHandle() const { return mPromisedString->GetFlatBufferHandle(); } -const nsBufferHandle* +const nsPromiseFlatString::buffer_handle_type* nsPromiseFlatString::GetBufferHandle() const { return mPromisedString->GetBufferHandle(); } -const nsSharedBufferHandle* +const nsPromiseFlatString::shared_buffer_handle_type* nsPromiseFlatString::GetSharedBufferHandle() const { return mPromisedString->GetSharedBufferHandle(); } PRBool -nsPromiseFlatString::IsDependentOn( const nsAString& aString ) const +nsPromiseFlatString::IsDependentOn( const abstract_string_type& aString ) const { return mPromisedString->IsDependentOn(aString); } -const PRUnichar* +const nsPromiseFlatString::char_type* nsPromiseFlatString::get() const { return mPromisedString->get(); @@ -80,15 +80,15 @@ nsPromiseFlatString::Length() const return mPromisedString->Length(); } -const PRUnichar* -nsPromiseFlatString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPromiseFlatString::char_type* +nsPromiseFlatString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { return mPromisedString->GetReadableFragment(aFragment, aRequest, aOffset); } -nsPromiseFlatCString::nsPromiseFlatCString( const nsPromiseFlatCString& aOther ) +nsPromiseFlatCString::nsPromiseFlatCString( const self_type& aOther ) : mFlattenedString(aOther.mFlattenedString) { if ( aOther.mPromisedString == &aOther.mFlattenedString ) @@ -97,7 +97,7 @@ nsPromiseFlatCString::nsPromiseFlatCString( const nsPromiseFlatCString& aOther ) mPromisedString = aOther.mPromisedString; } -nsPromiseFlatCString::nsPromiseFlatCString( const nsACString& aString ) +nsPromiseFlatCString::nsPromiseFlatCString( const abstract_string_type& aString ) { if ( aString.GetFlatBufferHandle() ) mPromisedString = NS_STATIC_CAST(const nsAFlatCString*, &aString); @@ -108,31 +108,31 @@ nsPromiseFlatCString::nsPromiseFlatCString( const nsACString& aString ) } } -const nsBufferHandle* +const nsPromiseFlatCString::buffer_handle_type* nsPromiseFlatCString::GetFlatBufferHandle() const { return mPromisedString->GetFlatBufferHandle(); } -const nsBufferHandle* +const nsPromiseFlatCString::buffer_handle_type* nsPromiseFlatCString::GetBufferHandle() const { return mPromisedString->GetBufferHandle(); } -const nsSharedBufferHandle* +const nsPromiseFlatCString::shared_buffer_handle_type* nsPromiseFlatCString::GetSharedBufferHandle() const { return mPromisedString->GetSharedBufferHandle(); } PRBool -nsPromiseFlatCString::IsDependentOn( const nsACString& aString ) const +nsPromiseFlatCString::IsDependentOn( const abstract_string_type& aString ) const { return mPromisedString->IsDependentOn(aString); } -const char* +const nsPromiseFlatCString::char_type* nsPromiseFlatCString::get() const { return mPromisedString->get(); @@ -144,8 +144,8 @@ nsPromiseFlatCString::Length() const return mPromisedString->Length(); } -const char* -nsPromiseFlatCString::GetReadableFragment( nsReadableFragment& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const +const nsPromiseFlatCString::char_type* +nsPromiseFlatCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { return mPromisedString->GetReadableFragment(aFragment, aRequest, aOffset); } diff --git a/xpcom/string/src/nsSharableString.cpp b/xpcom/string/src/nsSharableString.cpp index 063992bb305..66a4eb86577 100644 --- a/xpcom/string/src/nsSharableString.cpp +++ b/xpcom/string/src/nsSharableString.cpp @@ -27,30 +27,30 @@ // #include "nsBufferHandleUtils.h" void -nsSharableString::assign( const string_type& aReadable ) +nsSharableString::assign( const abstract_string_type& aReadable ) { - const nsSharedBufferHandle* handle = aReadable.GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle(); if ( !handle ) handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1)); mBuffer = handle; } -const nsSharedBufferHandle* +const nsSharableString::shared_buffer_handle_type* nsSharableString::GetSharedBufferHandle() const { return mBuffer.get(); } void -nsSharableCString::assign( const string_type& aReadable ) +nsSharableCString::assign( const abstract_string_type& aReadable ) { - const nsSharedBufferHandle* handle = aReadable.GetSharedBufferHandle(); + const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle(); if ( !handle ) handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1)); mBuffer = handle; } -const nsSharedBufferHandle* +const nsSharableCString::shared_buffer_handle_type* nsSharableCString::GetSharedBufferHandle() const { return mBuffer.get(); diff --git a/xpcom/string/src/nsXPIDLString.cpp b/xpcom/string/src/nsXPIDLString.cpp index a57e006d054..2ece11117e2 100644 --- a/xpcom/string/src/nsXPIDLString.cpp +++ b/xpcom/string/src/nsXPIDLString.cpp @@ -72,7 +72,7 @@ nsImportedStringHandle::RecalculateBoundaries() const #if DEBUG_STRING_STATS -const nsBufferHandle* +const nsXPIDLString::buffer_handle_type* nsXPIDLString::GetFlatBufferHandle() const { --sShareCount; @@ -80,7 +80,7 @@ nsXPIDLString::GetFlatBufferHandle() const } -const nsBufferHandle* +const nsXPIDLString::buffer_handle_type* nsXPIDLString::GetBufferHandle() const { --sShareCount; @@ -97,10 +97,10 @@ nsXPIDLString::DebugPrintStats( FILE* aOutFile ) #endif -const nsSharedBufferHandle* +const nsXPIDLString::shared_buffer_handle_type* nsXPIDLString::GetSharedBufferHandle() const { - const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); + const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); if ( answer && !answer->DataEnd() && answer->StorageStart() ) answer->RecalculateBoundaries(); @@ -112,10 +112,10 @@ nsXPIDLString::GetSharedBufferHandle() const } -PRUnichar** +nsXPIDLString::char_type** nsXPIDLString::PrepareForUseAsOutParam() { - nsImportedStringHandle* handle = new nsImportedStringHandle(); + nsImportedStringHandle* handle = new nsImportedStringHandle(); NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|."); mBuffer = handle; @@ -127,7 +127,7 @@ nsXPIDLString::PrepareForUseAsOutParam() #if DEBUG_STRING_STATS -const nsBufferHandle* +const nsXPIDLCString::buffer_handle_type* nsXPIDLCString::GetFlatBufferHandle() const { --sShareCount; @@ -135,7 +135,7 @@ nsXPIDLCString::GetFlatBufferHandle() const } -const nsBufferHandle* +const nsXPIDLCString::buffer_handle_type* nsXPIDLCString::GetBufferHandle() const { --sShareCount; @@ -152,10 +152,10 @@ nsXPIDLCString::DebugPrintStats( FILE* aOutFile ) #endif -const nsSharedBufferHandle* +const nsXPIDLCString::shared_buffer_handle_type* nsXPIDLCString::GetSharedBufferHandle() const { - const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); + const nsImportedStringHandle* answer = NS_STATIC_CAST(const nsImportedStringHandle*, mBuffer.get()); if ( answer && !answer->DataEnd() && answer->StorageStart() ) answer->RecalculateBoundaries(); @@ -167,10 +167,10 @@ nsXPIDLCString::GetSharedBufferHandle() const } -char** +nsXPIDLCString::char_type** nsXPIDLCString::PrepareForUseAsOutParam() { - nsImportedStringHandle* handle = new nsImportedStringHandle(); + nsImportedStringHandle* handle = new nsImportedStringHandle(); NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|."); mBuffer = handle;