Use typedefs throughout the string code. r=dbaron, sr=scc

This commit is contained in:
jaggernaut%netscape.com 2001-10-13 15:01:21 +00:00
Родитель 137d680fb3
Коммит 2d7e8254e7
42 изменённых файлов: 760 добавлений и 1156 удалений

Просмотреть файл

@ -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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, 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<Length(), "|CharAt| out-of-range");
@ -73,7 +73,7 @@ nsAFlatString::CharAt( PRUint32 i ) const
}
inline
char
nsAFlatCString::char_type
nsAFlatCString::CharAt( PRUint32 i ) const
{
NS_ASSERTION(i<Length(), "|CharAt| out-of-range");

Просмотреть файл

@ -48,30 +48,38 @@
class NS_COM nsAString
{
public:
typedef nsAString self_type;
typedef nsAPromiseString promise_type;
typedef PRUnichar char_type;
typedef char incompatible_char_type;
typedef nsBufferHandle<char_type> buffer_handle_type;
typedef nsConstBufferHandle<char_type> const_buffer_handle_type;
typedef nsSharedBufferHandle<char_type> shared_buffer_handle_type;
typedef nsReadableFragment<char_type> const_fragment_type;
typedef nsWritableFragment<char_type> fragment_type;
typedef nsAString self_type;
typedef nsAString abstract_string_type;
typedef nsReadingIterator<char_type> const_iterator;
typedef nsWritingIterator<char_type> 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<char_type>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char_type>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char_type>* GetSharedBufferHandle() 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.
@ -285,23 +293,32 @@ class NS_COM nsAString
// protected:
public:
virtual const char_type* GetReadableFragment( nsReadableFragment<char_type>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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 nsBufferHandle<char_type> buffer_handle_type;
typedef nsConstBufferHandle<char_type> const_buffer_handle_type;
typedef nsSharedBufferHandle<char_type> shared_buffer_handle_type;
typedef nsReadableFragment<char_type> const_fragment_type;
typedef nsWritableFragment<char_type> fragment_type;
typedef nsACString self_type;
typedef nsACString abstract_string_type;
typedef nsReadingIterator<char_type> const_iterator;
typedef nsWritingIterator<char_type> iterator;
typedef nsAPromiseCString promise_type;
typedef PRUint32 size_type;
typedef PRUint32 index_type;
@ -314,9 +331,9 @@ class NS_COM nsACString
virtual PRUint32 GetImplementationFlags() const;
virtual const nsBufferHandle<char_type>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char_type>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char_type>* GetSharedBufferHandle() 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.
@ -530,8 +547,8 @@ class NS_COM nsACString
// protected:
public:
virtual const char_type* GetReadableFragment( nsReadableFragment<char_type>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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() );

Просмотреть файл

@ -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<char_type>&, nsFragmentRequest, PRUint32 ) const;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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<char_type>& aFragment ) const
GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const
{
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString;
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString;
}
int
SetLeftStringInFragment( nsReadableFragment<char_type>& aFragment ) const
SetFirstStringInFragment( const_fragment_type& aFragment ) const
{
aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask);
return kLeftString;
return kFirstString;
}
int
SetRightStringInFragment( nsReadableFragment<char_type>& 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,7 +117,7 @@ class NS_COM nsDependentConcatenation
// which would break the algorithm for distributing bits in the fragment identifier
private:
const string_type* mStrings[2];
const abstract_string_type* mStrings[2];
PRUint32 mFragmentIdentifierMask;
};
@ -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<char_type>&, nsFragmentRequest, PRUint32 ) const;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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<char_type>& aFragment ) const
GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const
{
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString;
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString;
}
int
SetLeftStringInFragment( nsReadableFragment<char_type>& aFragment ) const
SetFirstStringInFragment( const_fragment_type& aFragment ) const
{
aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask);
return kLeftString;
return kFirstString;
}
int
SetRightStringInFragment( nsReadableFragment<char_type>& 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,7 +191,7 @@ class NS_COM nsDependentCConcatenation
// which would break the algorithm for distributing bits in the fragment identifier
private:
const string_type* mStrings[2];
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);
}

Просмотреть файл

@ -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<PRUnichar>::length(aPtr)) : 0);
mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits<char_type>::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<PRUnichar>* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<PRUnichar>*, &mHandle); }
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<PRUnichar>*, &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<PRUnichar> 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<char>::length(aPtr)) : 0);
mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits<char_type>::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( 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<char>* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<char>*, &mHandle); }
virtual const nsBufferHandle<char>* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<char>*, &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<char> mHandle;
const_buffer_handle_type mHandle;
};
#endif /* !defined(nsDependentString_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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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,19 +74,19 @@ 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;
const abstract_string_type& mString;
PRUint32 mStartPos;
PRUint32 mLength;
};
@ -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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, 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,19 +127,19 @@ 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;
const abstract_string_type& mString;
PRUint32 mStartPos;
PRUint32 mLength;
};

Просмотреть файл

@ -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 <scc@mozilla.org> (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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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___)

Просмотреть файл

@ -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))

Просмотреть файл

@ -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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 ) { return 0; }
// virtual PRBool GetReadableFragment( nsReadableFragment<char>& 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;
char_type* mStart;
PRUint32 mLength;
char mLocalBuffer[ kLocalBufferSize + 1 ];
char_type mLocalBuffer[ kLocalBufferSize + 1 ];
};
#endif // !defined(nsPrintfCString_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<PRUnichar>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<PRUnichar>* 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<PRUnichar>&, 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<char>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char>* 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<char>&, 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;

Просмотреть файл

@ -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<char_type>* 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<char_type>* GetSharedBufferHandle() const;
void assign( const abstract_string_type& );
virtual const shared_buffer_handle_type* GetSharedBufferHandle() const;
protected:
nsAutoBufferHandle<char_type> 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<char_type>* 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<char_type>* GetSharedBufferHandle() const;
void assign( const abstract_string_type& );
virtual const shared_buffer_handle_type* GetSharedBufferHandle() const;
protected:
nsAutoBufferHandle<char_type> mBuffer;

Просмотреть файл

@ -63,14 +63,17 @@ class nsReadingIterator
typedef const CharT& reference;
// typedef bidirectional_iterator_tag iterator_category;
typedef nsReadableFragment<CharT> const_fragment_type;
typedef nsWritableFragment<CharT> fragment_type;
private:
friend class nsAString;
friend class nsACString;
typedef typename nsStringTraits<CharT>::abstract_string_type string_type;
typedef typename nsStringTraits<CharT>::abstract_string_type abstract_string_type;
nsReadableFragment<CharT> 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<CharT>&
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<CharT> const_fragment_type;
typedef nsWritableFragment<CharT> fragment_type;
private:
friend class nsAString;
friend class nsACString;
typedef typename nsStringTraits<CharT>::abstract_string_type string_type;
typedef typename nsStringTraits<CharT>::abstract_string_type abstract_string_type;
nsWritableFragment<CharT> 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<CharT>&
const fragment_type&
fragment() const
{
return mFragment;
}
nsWritableFragment<CharT>&
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)");

Просмотреть файл

@ -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<PRUnichar>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const;
virtual const buffer_handle_type* GetFlatBufferHandle() const;
virtual const buffer_handle_type* GetBufferHandle() const;
#endif
virtual const nsSharedBufferHandle<PRUnichar>* 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<char>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char>* GetBufferHandle() const;
virtual const buffer_handle_type* GetFlatBufferHandle() const;
virtual const buffer_handle_type* GetBufferHandle() const;
#endif
virtual const nsSharedBufferHandle<char>* 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

Просмотреть файл

@ -23,8 +23,8 @@
#include "nsAFlatString.h"
const PRUnichar*
nsAFlatString::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& aFragment, ns
case kLastFragment:
case kFragmentAt:
{
const nsBufferHandle<PRUnichar>* 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<PRUnichar>& aFragment, ns
}
}
PRUnichar*
nsAFlatString::GetWritableFragment( nsWritableFragment<PRUnichar>& 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<PRUnichar>& aFragment, ns
case kLastFragment:
case kFragmentAt:
{
nsBufferHandle<PRUnichar>* buffer = NS_CONST_CAST(nsBufferHandle<PRUnichar>*, 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<PRUnichar>& aFragment, ns
}
}
const char*
nsAFlatCString::GetReadableFragment( nsReadableFragment<char>& 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<char>& aFragment, nsFrag
case kLastFragment:
case kFragmentAt:
{
const nsBufferHandle<char>* 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<char>& aFragment, nsFrag
}
}
char*
nsAFlatCString::GetWritableFragment( nsWritableFragment<char>& 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<char>& aFragment, nsFrag
case kLastFragment:
case kFragmentAt:
{
nsBufferHandle<char>* buffer = NS_CONST_CAST(nsBufferHandle<char>*, 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<char>& aFragment, nsFrag
PRUint32
nsAFlatString::Length() const
{
const nsBufferHandle<PRUnichar>* handle = GetBufferHandle();
const buffer_handle_type* handle = GetBufferHandle();
return PRUint32(handle ? handle->DataLength() : 0);
}
PRUint32
nsAFlatCString::Length() const
{
const nsBufferHandle<char>* 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<PRUnichar>* 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<char>* handle = GetBufferHandle();
const buffer_handle_type* handle = GetBufferHandle();
// NS_ASSERTION(handle, "handle is null!");
return handle ? handle->DataStart() : 0;
}

Просмотреть файл

@ -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<PRUnichar>::compare(lhs, rhs, aLength);
return nsCharTraits<char_type>::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<PRUnichar>*
const nsAString::shared_buffer_handle_type*
nsAString::GetSharedBufferHandle() const
{
return 0;
}
const nsBufferHandle<PRUnichar>*
const nsAString::buffer_handle_type*
nsAString::GetFlatBufferHandle() const
{
return GetSharedBufferHandle();
}
const nsBufferHandle<PRUnichar>*
const nsAString::buffer_handle_type*
nsAString::GetBufferHandle() const
{
return GetSharedBufferHandle();
@ -108,12 +107,13 @@ PRUint32
nsAString::GetImplementationFlags() const
{
PRUint32 flags = 0;
const nsSharedBufferHandle<char_type>* 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<char>::compare(lhs, rhs, aLength);
return nsCharTraits<char_type>::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<char>*
const nsACString::shared_buffer_handle_type*
nsACString::GetSharedBufferHandle() const
{
return 0;
}
const nsBufferHandle<char>*
const nsACString::buffer_handle_type*
nsACString::GetFlatBufferHandle() const
{
return GetSharedBufferHandle();
}
const nsBufferHandle<char>*
const nsACString::buffer_handle_type*
nsACString::GetBufferHandle() const
{
return GetSharedBufferHandle();
@ -612,12 +611,13 @@ PRUint32
nsACString::GetImplementationFlags() const
{
PRUint32 flags = 0;
const nsSharedBufferHandle<char_type>* handle = GetSharedBufferHandle();
const shared_buffer_handle_type* handle = GetSharedBufferHandle();
if ( handle )
flags = handle->GetImplementationFlags();
return flags;
}
PRBool
nsACString::IsVoid() const
{

Просмотреть файл

@ -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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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;

Просмотреть файл

@ -29,8 +29,8 @@ nsDependentSubstring::Length() const
return mLength;
}
const PRUnichar*
nsDependentSubstring::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& 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<char>& 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<char>& 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.

Просмотреть файл

@ -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 <scc@mozilla.org>
*
* Contributor(s):
*/
#include "nsFragmentedString.h"
const PRUnichar*
nsFragmentedString::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& 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

Просмотреть файл

@ -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<char>& aFragment, nsFragmentRequest aRequest ) const
nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest ) const
{
switch ( aRequest )
{
@ -114,8 +114,8 @@ nsPrintfCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFra
}
}
#else
const char*
nsPrintfCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const
const nsPrintfCString::char_type*
nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const
{
switch ( aRequest )
{

Просмотреть файл

@ -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<PRUnichar>*
const nsPromiseFlatString::buffer_handle_type*
nsPromiseFlatString::GetFlatBufferHandle() const
{
return mPromisedString->GetFlatBufferHandle();
}
const nsBufferHandle<PRUnichar>*
const nsPromiseFlatString::buffer_handle_type*
nsPromiseFlatString::GetBufferHandle() const
{
return mPromisedString->GetBufferHandle();
}
const nsSharedBufferHandle<PRUnichar>*
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<PRUnichar>& 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<char>*
const nsPromiseFlatCString::buffer_handle_type*
nsPromiseFlatCString::GetFlatBufferHandle() const
{
return mPromisedString->GetFlatBufferHandle();
}
const nsBufferHandle<char>*
const nsPromiseFlatCString::buffer_handle_type*
nsPromiseFlatCString::GetBufferHandle() const
{
return mPromisedString->GetBufferHandle();
}
const nsSharedBufferHandle<char>*
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<char>& 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);
}

Просмотреть файл

@ -27,30 +27,30 @@
// #include "nsBufferHandleUtils.h"
void
nsSharableString::assign( const string_type& aReadable )
nsSharableString::assign( const abstract_string_type& aReadable )
{
const nsSharedBufferHandle<char_type>* handle = aReadable.GetSharedBufferHandle();
const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle();
if ( !handle )
handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1));
mBuffer = handle;
}
const nsSharedBufferHandle<PRUnichar>*
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<char_type>* handle = aReadable.GetSharedBufferHandle();
const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle();
if ( !handle )
handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1));
mBuffer = handle;
}
const nsSharedBufferHandle<char>*
const nsSharableCString::shared_buffer_handle_type*
nsSharableCString::GetSharedBufferHandle() const
{
return mBuffer.get();

Просмотреть файл

@ -72,7 +72,7 @@ nsImportedStringHandle<CharT>::RecalculateBoundaries() const
#if DEBUG_STRING_STATS
const nsBufferHandle<PRUnichar>*
const nsXPIDLString::buffer_handle_type*
nsXPIDLString::GetFlatBufferHandle() const
{
--sShareCount;
@ -80,7 +80,7 @@ nsXPIDLString::GetFlatBufferHandle() const
}
const nsBufferHandle<PRUnichar>*
const nsXPIDLString::buffer_handle_type*
nsXPIDLString::GetBufferHandle() const
{
--sShareCount;
@ -97,10 +97,10 @@ nsXPIDLString::DebugPrintStats( FILE* aOutFile )
#endif
const nsSharedBufferHandle<PRUnichar>*
const nsXPIDLString::shared_buffer_handle_type*
nsXPIDLString::GetSharedBufferHandle() const
{
const nsImportedStringHandle<PRUnichar>* answer = NS_STATIC_CAST(const nsImportedStringHandle<PRUnichar>*, mBuffer.get());
const nsImportedStringHandle<char_type>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char_type>*, mBuffer.get());
if ( answer && !answer->DataEnd() && answer->StorageStart() )
answer->RecalculateBoundaries();
@ -112,10 +112,10 @@ nsXPIDLString::GetSharedBufferHandle() const
}
PRUnichar**
nsXPIDLString::char_type**
nsXPIDLString::PrepareForUseAsOutParam()
{
nsImportedStringHandle<PRUnichar>* handle = new nsImportedStringHandle<PRUnichar>();
nsImportedStringHandle<char_type>* handle = new nsImportedStringHandle<char_type>();
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<char>*
const nsXPIDLCString::buffer_handle_type*
nsXPIDLCString::GetFlatBufferHandle() const
{
--sShareCount;
@ -135,7 +135,7 @@ nsXPIDLCString::GetFlatBufferHandle() const
}
const nsBufferHandle<char>*
const nsXPIDLCString::buffer_handle_type*
nsXPIDLCString::GetBufferHandle() const
{
--sShareCount;
@ -152,10 +152,10 @@ nsXPIDLCString::DebugPrintStats( FILE* aOutFile )
#endif
const nsSharedBufferHandle<char>*
const nsXPIDLCString::shared_buffer_handle_type*
nsXPIDLCString::GetSharedBufferHandle() const
{
const nsImportedStringHandle<char>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char>*, mBuffer.get());
const nsImportedStringHandle<char_type>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char_type>*, mBuffer.get());
if ( answer && !answer->DataEnd() && answer->StorageStart() )
answer->RecalculateBoundaries();
@ -167,10 +167,10 @@ nsXPIDLCString::GetSharedBufferHandle() const
}
char**
nsXPIDLCString::char_type**
nsXPIDLCString::PrepareForUseAsOutParam()
{
nsImportedStringHandle<char>* handle = new nsImportedStringHandle<char>();
nsImportedStringHandle<char_type>* handle = new nsImportedStringHandle<char_type>();
NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|.");
mBuffer = handle;

Просмотреть файл

@ -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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, 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<Length(), "|CharAt| out-of-range");
@ -73,7 +73,7 @@ nsAFlatString::CharAt( PRUint32 i ) const
}
inline
char
nsAFlatCString::char_type
nsAFlatCString::CharAt( PRUint32 i ) const
{
NS_ASSERTION(i<Length(), "|CharAt| out-of-range");

Просмотреть файл

@ -48,30 +48,38 @@
class NS_COM nsAString
{
public:
typedef nsAString self_type;
typedef nsAPromiseString promise_type;
typedef PRUnichar char_type;
typedef char incompatible_char_type;
typedef nsBufferHandle<char_type> buffer_handle_type;
typedef nsConstBufferHandle<char_type> const_buffer_handle_type;
typedef nsSharedBufferHandle<char_type> shared_buffer_handle_type;
typedef nsReadableFragment<char_type> const_fragment_type;
typedef nsWritableFragment<char_type> fragment_type;
typedef nsAString self_type;
typedef nsAString abstract_string_type;
typedef nsReadingIterator<char_type> const_iterator;
typedef nsWritingIterator<char_type> 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<char_type>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char_type>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char_type>* GetSharedBufferHandle() 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.
@ -285,23 +293,32 @@ class NS_COM nsAString
// protected:
public:
virtual const char_type* GetReadableFragment( nsReadableFragment<char_type>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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 nsBufferHandle<char_type> buffer_handle_type;
typedef nsConstBufferHandle<char_type> const_buffer_handle_type;
typedef nsSharedBufferHandle<char_type> shared_buffer_handle_type;
typedef nsReadableFragment<char_type> const_fragment_type;
typedef nsWritableFragment<char_type> fragment_type;
typedef nsACString self_type;
typedef nsACString abstract_string_type;
typedef nsReadingIterator<char_type> const_iterator;
typedef nsWritingIterator<char_type> iterator;
typedef nsAPromiseCString promise_type;
typedef PRUint32 size_type;
typedef PRUint32 index_type;
@ -314,9 +331,9 @@ class NS_COM nsACString
virtual PRUint32 GetImplementationFlags() const;
virtual const nsBufferHandle<char_type>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char_type>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char_type>* GetSharedBufferHandle() 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.
@ -530,8 +547,8 @@ class NS_COM nsACString
// protected:
public:
virtual const char_type* GetReadableFragment( nsReadableFragment<char_type>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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() );

Просмотреть файл

@ -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<char_type>&, nsFragmentRequest, PRUint32 ) const;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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<char_type>& aFragment ) const
GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const
{
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString;
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString;
}
int
SetLeftStringInFragment( nsReadableFragment<char_type>& aFragment ) const
SetFirstStringInFragment( const_fragment_type& aFragment ) const
{
aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask);
return kLeftString;
return kFirstString;
}
int
SetRightStringInFragment( nsReadableFragment<char_type>& 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,7 +117,7 @@ class NS_COM nsDependentConcatenation
// which would break the algorithm for distributing bits in the fragment identifier
private:
const string_type* mStrings[2];
const abstract_string_type* mStrings[2];
PRUint32 mFragmentIdentifierMask;
};
@ -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<char_type>&, nsFragmentRequest, PRUint32 ) const;
virtual char_type* GetWritableFragment( nsWritableFragment<char_type>&, 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<char_type>& aFragment ) const
GetCurrentStringFromFragment( const const_fragment_type& aFragment ) const
{
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kRightString : kLeftString;
return (aFragment.GetIDAsInt() & mFragmentIdentifierMask) ? kLastString : kFirstString;
}
int
SetLeftStringInFragment( nsReadableFragment<char_type>& aFragment ) const
SetFirstStringInFragment( const_fragment_type& aFragment ) const
{
aFragment.SetID(aFragment.GetIDAsInt() & ~mFragmentIdentifierMask);
return kLeftString;
return kFirstString;
}
int
SetRightStringInFragment( nsReadableFragment<char_type>& 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,7 +191,7 @@ class NS_COM nsDependentCConcatenation
// which would break the algorithm for distributing bits in the fragment identifier
private:
const string_type* mStrings[2];
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);
}

Просмотреть файл

@ -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<PRUnichar>::length(aPtr)) : 0);
mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits<char_type>::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<PRUnichar>* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<PRUnichar>*, &mHandle); }
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<PRUnichar>*, &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<PRUnichar> 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<char>::length(aPtr)) : 0);
mHandle.DataEnd(aPtr ? (aPtr+nsCharTraits<char_type>::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( 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<char>* GetFlatBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<char>*, &mHandle); }
virtual const nsBufferHandle<char>* GetBufferHandle() const { return NS_REINTERPRET_CAST(const nsBufferHandle<char>*, &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<char> mHandle;
const_buffer_handle_type mHandle;
};
#endif /* !defined(nsDependentString_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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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,19 +74,19 @@ 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;
const abstract_string_type& mString;
PRUint32 mStartPos;
PRUint32 mLength;
};
@ -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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, 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,19 +127,19 @@ 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;
const abstract_string_type& mString;
PRUint32 mStartPos;
PRUint32 mLength;
};

Просмотреть файл

@ -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 <scc@mozilla.org> (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<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, 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___)

Просмотреть файл

@ -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))

Просмотреть файл

@ -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<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 ) { return 0; }
// virtual PRBool GetReadableFragment( nsReadableFragment<char>& 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;
char_type* mStart;
PRUint32 mLength;
char mLocalBuffer[ kLocalBufferSize + 1 ];
char_type mLocalBuffer[ kLocalBufferSize + 1 ];
};
#endif // !defined(nsPrintfCString_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<PRUnichar>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<PRUnichar>* 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<PRUnichar>&, 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<char>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char>* GetBufferHandle() const;
virtual const nsSharedBufferHandle<char>* 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<char>&, 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;

Просмотреть файл

@ -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<char_type>* 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<char_type>* GetSharedBufferHandle() const;
void assign( const abstract_string_type& );
virtual const shared_buffer_handle_type* GetSharedBufferHandle() const;
protected:
nsAutoBufferHandle<char_type> 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<char_type>* 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<char_type>* GetSharedBufferHandle() const;
void assign( const abstract_string_type& );
virtual const shared_buffer_handle_type* GetSharedBufferHandle() const;
protected:
nsAutoBufferHandle<char_type> mBuffer;

Просмотреть файл

@ -63,14 +63,17 @@ class nsReadingIterator
typedef const CharT& reference;
// typedef bidirectional_iterator_tag iterator_category;
typedef nsReadableFragment<CharT> const_fragment_type;
typedef nsWritableFragment<CharT> fragment_type;
private:
friend class nsAString;
friend class nsACString;
typedef typename nsStringTraits<CharT>::abstract_string_type string_type;
typedef typename nsStringTraits<CharT>::abstract_string_type abstract_string_type;
nsReadableFragment<CharT> 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<CharT>&
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<CharT> const_fragment_type;
typedef nsWritableFragment<CharT> fragment_type;
private:
friend class nsAString;
friend class nsACString;
typedef typename nsStringTraits<CharT>::abstract_string_type string_type;
typedef typename nsStringTraits<CharT>::abstract_string_type abstract_string_type;
nsWritableFragment<CharT> 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<CharT>&
const fragment_type&
fragment() const
{
return mFragment;
}
nsWritableFragment<CharT>&
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)");

Просмотреть файл

@ -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<PRUnichar>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<PRUnichar>* GetBufferHandle() const;
virtual const buffer_handle_type* GetFlatBufferHandle() const;
virtual const buffer_handle_type* GetBufferHandle() const;
#endif
virtual const nsSharedBufferHandle<PRUnichar>* 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<char>* GetFlatBufferHandle() const;
virtual const nsBufferHandle<char>* GetBufferHandle() const;
virtual const buffer_handle_type* GetFlatBufferHandle() const;
virtual const buffer_handle_type* GetBufferHandle() const;
#endif
virtual const nsSharedBufferHandle<char>* 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

Просмотреть файл

@ -23,8 +23,8 @@
#include "nsAFlatString.h"
const PRUnichar*
nsAFlatString::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& aFragment, ns
case kLastFragment:
case kFragmentAt:
{
const nsBufferHandle<PRUnichar>* 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<PRUnichar>& aFragment, ns
}
}
PRUnichar*
nsAFlatString::GetWritableFragment( nsWritableFragment<PRUnichar>& 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<PRUnichar>& aFragment, ns
case kLastFragment:
case kFragmentAt:
{
nsBufferHandle<PRUnichar>* buffer = NS_CONST_CAST(nsBufferHandle<PRUnichar>*, 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<PRUnichar>& aFragment, ns
}
}
const char*
nsAFlatCString::GetReadableFragment( nsReadableFragment<char>& 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<char>& aFragment, nsFrag
case kLastFragment:
case kFragmentAt:
{
const nsBufferHandle<char>* 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<char>& aFragment, nsFrag
}
}
char*
nsAFlatCString::GetWritableFragment( nsWritableFragment<char>& 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<char>& aFragment, nsFrag
case kLastFragment:
case kFragmentAt:
{
nsBufferHandle<char>* buffer = NS_CONST_CAST(nsBufferHandle<char>*, 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<char>& aFragment, nsFrag
PRUint32
nsAFlatString::Length() const
{
const nsBufferHandle<PRUnichar>* handle = GetBufferHandle();
const buffer_handle_type* handle = GetBufferHandle();
return PRUint32(handle ? handle->DataLength() : 0);
}
PRUint32
nsAFlatCString::Length() const
{
const nsBufferHandle<char>* 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<PRUnichar>* 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<char>* handle = GetBufferHandle();
const buffer_handle_type* handle = GetBufferHandle();
// NS_ASSERTION(handle, "handle is null!");
return handle ? handle->DataStart() : 0;
}

Просмотреть файл

@ -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<PRUnichar>::compare(lhs, rhs, aLength);
return nsCharTraits<char_type>::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<PRUnichar>*
const nsAString::shared_buffer_handle_type*
nsAString::GetSharedBufferHandle() const
{
return 0;
}
const nsBufferHandle<PRUnichar>*
const nsAString::buffer_handle_type*
nsAString::GetFlatBufferHandle() const
{
return GetSharedBufferHandle();
}
const nsBufferHandle<PRUnichar>*
const nsAString::buffer_handle_type*
nsAString::GetBufferHandle() const
{
return GetSharedBufferHandle();
@ -108,12 +107,13 @@ PRUint32
nsAString::GetImplementationFlags() const
{
PRUint32 flags = 0;
const nsSharedBufferHandle<char_type>* 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<char>::compare(lhs, rhs, aLength);
return nsCharTraits<char_type>::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<char>*
const nsACString::shared_buffer_handle_type*
nsACString::GetSharedBufferHandle() const
{
return 0;
}
const nsBufferHandle<char>*
const nsACString::buffer_handle_type*
nsACString::GetFlatBufferHandle() const
{
return GetSharedBufferHandle();
}
const nsBufferHandle<char>*
const nsACString::buffer_handle_type*
nsACString::GetBufferHandle() const
{
return GetSharedBufferHandle();
@ -612,12 +611,13 @@ PRUint32
nsACString::GetImplementationFlags() const
{
PRUint32 flags = 0;
const nsSharedBufferHandle<char_type>* handle = GetSharedBufferHandle();
const shared_buffer_handle_type* handle = GetSharedBufferHandle();
if ( handle )
flags = handle->GetImplementationFlags();
return flags;
}
PRBool
nsACString::IsVoid() const
{

Просмотреть файл

@ -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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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<char_type>& 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;

Просмотреть файл

@ -29,8 +29,8 @@ nsDependentSubstring::Length() const
return mLength;
}
const PRUnichar*
nsDependentSubstring::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& 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<char>& 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<char>& 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.

Просмотреть файл

@ -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 <scc@mozilla.org>
*
* Contributor(s):
*/
#include "nsFragmentedString.h"
const PRUnichar*
nsFragmentedString::GetReadableFragment( nsReadableFragment<PRUnichar>& 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<PRUnichar>& 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

Просмотреть файл

@ -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<char>& aFragment, nsFragmentRequest aRequest ) const
nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest ) const
{
switch ( aRequest )
{
@ -114,8 +114,8 @@ nsPrintfCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFra
}
}
#else
const char*
nsPrintfCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const
const nsPrintfCString::char_type*
nsPrintfCString::GetReadableFragment( const_fragment_type& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const
{
switch ( aRequest )
{

Просмотреть файл

@ -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<PRUnichar>*
const nsPromiseFlatString::buffer_handle_type*
nsPromiseFlatString::GetFlatBufferHandle() const
{
return mPromisedString->GetFlatBufferHandle();
}
const nsBufferHandle<PRUnichar>*
const nsPromiseFlatString::buffer_handle_type*
nsPromiseFlatString::GetBufferHandle() const
{
return mPromisedString->GetBufferHandle();
}
const nsSharedBufferHandle<PRUnichar>*
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<PRUnichar>& 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<char>*
const nsPromiseFlatCString::buffer_handle_type*
nsPromiseFlatCString::GetFlatBufferHandle() const
{
return mPromisedString->GetFlatBufferHandle();
}
const nsBufferHandle<char>*
const nsPromiseFlatCString::buffer_handle_type*
nsPromiseFlatCString::GetBufferHandle() const
{
return mPromisedString->GetBufferHandle();
}
const nsSharedBufferHandle<char>*
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<char>& 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);
}

Просмотреть файл

@ -27,30 +27,30 @@
// #include "nsBufferHandleUtils.h"
void
nsSharableString::assign( const string_type& aReadable )
nsSharableString::assign( const abstract_string_type& aReadable )
{
const nsSharedBufferHandle<char_type>* handle = aReadable.GetSharedBufferHandle();
const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle();
if ( !handle )
handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1));
mBuffer = handle;
}
const nsSharedBufferHandle<PRUnichar>*
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<char_type>* handle = aReadable.GetSharedBufferHandle();
const shared_buffer_handle_type* handle = aReadable.GetSharedBufferHandle();
if ( !handle )
handle = NS_AllocateContiguousHandleWithData(handle, aReadable, PRUint32(1));
mBuffer = handle;
}
const nsSharedBufferHandle<char>*
const nsSharableCString::shared_buffer_handle_type*
nsSharableCString::GetSharedBufferHandle() const
{
return mBuffer.get();

Просмотреть файл

@ -72,7 +72,7 @@ nsImportedStringHandle<CharT>::RecalculateBoundaries() const
#if DEBUG_STRING_STATS
const nsBufferHandle<PRUnichar>*
const nsXPIDLString::buffer_handle_type*
nsXPIDLString::GetFlatBufferHandle() const
{
--sShareCount;
@ -80,7 +80,7 @@ nsXPIDLString::GetFlatBufferHandle() const
}
const nsBufferHandle<PRUnichar>*
const nsXPIDLString::buffer_handle_type*
nsXPIDLString::GetBufferHandle() const
{
--sShareCount;
@ -97,10 +97,10 @@ nsXPIDLString::DebugPrintStats( FILE* aOutFile )
#endif
const nsSharedBufferHandle<PRUnichar>*
const nsXPIDLString::shared_buffer_handle_type*
nsXPIDLString::GetSharedBufferHandle() const
{
const nsImportedStringHandle<PRUnichar>* answer = NS_STATIC_CAST(const nsImportedStringHandle<PRUnichar>*, mBuffer.get());
const nsImportedStringHandle<char_type>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char_type>*, mBuffer.get());
if ( answer && !answer->DataEnd() && answer->StorageStart() )
answer->RecalculateBoundaries();
@ -112,10 +112,10 @@ nsXPIDLString::GetSharedBufferHandle() const
}
PRUnichar**
nsXPIDLString::char_type**
nsXPIDLString::PrepareForUseAsOutParam()
{
nsImportedStringHandle<PRUnichar>* handle = new nsImportedStringHandle<PRUnichar>();
nsImportedStringHandle<char_type>* handle = new nsImportedStringHandle<char_type>();
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<char>*
const nsXPIDLCString::buffer_handle_type*
nsXPIDLCString::GetFlatBufferHandle() const
{
--sShareCount;
@ -135,7 +135,7 @@ nsXPIDLCString::GetFlatBufferHandle() const
}
const nsBufferHandle<char>*
const nsXPIDLCString::buffer_handle_type*
nsXPIDLCString::GetBufferHandle() const
{
--sShareCount;
@ -152,10 +152,10 @@ nsXPIDLCString::DebugPrintStats( FILE* aOutFile )
#endif
const nsSharedBufferHandle<char>*
const nsXPIDLCString::shared_buffer_handle_type*
nsXPIDLCString::GetSharedBufferHandle() const
{
const nsImportedStringHandle<char>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char>*, mBuffer.get());
const nsImportedStringHandle<char_type>* answer = NS_STATIC_CAST(const nsImportedStringHandle<char_type>*, mBuffer.get());
if ( answer && !answer->DataEnd() && answer->StorageStart() )
answer->RecalculateBoundaries();
@ -167,10 +167,10 @@ nsXPIDLCString::GetSharedBufferHandle() const
}
char**
nsXPIDLCString::char_type**
nsXPIDLCString::PrepareForUseAsOutParam()
{
nsImportedStringHandle<char>* handle = new nsImportedStringHandle<char>();
nsImportedStringHandle<char_type>* handle = new nsImportedStringHandle<char_type>();
NS_ASSERTION(handle, "Trouble! We couldn't get a new handle during |getter_Copies|.");
mBuffer = handle;