зеркало из https://github.com/mozilla/gecko-dev.git
making promises work
This commit is contained in:
Родитель
8dbf8e7713
Коммит
bf109dc6c9
|
@ -336,6 +336,14 @@ class basic_nsAReadableString
|
|||
// protected:
|
||||
virtual const void* Implementation() const;
|
||||
virtual const CharT* GetReadableFragment( nsReadableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return &aString == this; }
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
PRUint32 CountChar( incompatible_char_type ) const;
|
||||
// in Compare( incompatible_char_type ) const;
|
||||
// PRBool Equals( incompatible_char_type ) const;
|
||||
};
|
||||
|
||||
template <class CharT>
|
||||
|
@ -513,7 +521,7 @@ basic_nsAReadableString<CharT>::CountChar( CharT c ) const
|
|||
nsReadingIterator<CharT> iter( BeginReading() );
|
||||
for (;;)
|
||||
{
|
||||
PRUint32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
PRInt32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
result += PRUint32(count(iter.operator->(), iter.operator->()+lengthToExamineInThisFragment, c));
|
||||
if ( !(lengthToExamine -= lengthToExamineInThisFragment) )
|
||||
return result;
|
||||
|
@ -750,9 +758,11 @@ basic_nsLiteralChar<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFra
|
|||
// nsPromiseConcatenation
|
||||
//
|
||||
|
||||
template <class CharT> class nsPromiseReadable : public basic_nsAReadableString<CharT> { };
|
||||
|
||||
template <class CharT>
|
||||
class nsPromiseConcatenation
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS
|
||||
|
||||
|
@ -807,6 +817,7 @@ class nsPromiseConcatenation
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
||||
nsPromiseConcatenation<CharT> operator+( const basic_nsAReadableString<CharT>& rhs ) const;
|
||||
|
||||
|
@ -829,6 +840,13 @@ nsPromiseConcatenation<CharT>::Length() const
|
|||
return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length();
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
PRBool
|
||||
nsPromiseConcatenation<CharT>::Promises( const basic_nsAReadableString<CharT>& aString ) const
|
||||
{
|
||||
return mStrings[0]->Promises(aString) || mStrings[1]->Promises(aString);
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
const CharT*
|
||||
nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const
|
||||
|
@ -866,15 +884,15 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
}
|
||||
|
||||
const CharT* result;
|
||||
bool done;
|
||||
PRBool done;
|
||||
do
|
||||
{
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition);
|
||||
|
||||
if ( !result )
|
||||
{
|
||||
done = false;
|
||||
done = PR_FALSE;
|
||||
if ( aRequest == kNextFragment && whichString == kLeftString )
|
||||
{
|
||||
aRequest = kFirstFragment;
|
||||
|
@ -886,7 +904,7 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
whichString = SetLeftStringInFragment(aFragment);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
}
|
||||
}
|
||||
while ( !done );
|
||||
|
@ -912,7 +930,7 @@ nsPromiseConcatenation<CharT>::operator+( const basic_nsAReadableString<CharT>&
|
|||
|
||||
template <class CharT>
|
||||
class nsPromiseSubstring
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS (mostly)
|
||||
|
||||
|
@ -935,6 +953,7 @@ class nsPromiseSubstring
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
private:
|
||||
const basic_nsAReadableString<CharT>& mString;
|
||||
|
@ -1037,6 +1056,11 @@ template <class CharT>
|
|||
nsPromiseSubstring<CharT>
|
||||
Substring( const basic_nsAReadableString<CharT>& aString, PRUint32 aStartPos, PRUint32 aSubstringLength )
|
||||
{
|
||||
#if 0
|
||||
// signatures don't work, but consider this twist to help in assignments
|
||||
if ( aSubstringLength == aString.Length() && aStartPos == 0 )
|
||||
return aString;
|
||||
#endif
|
||||
return nsPromiseSubstring<CharT>(aString, aStartPos, aSubstringLength);
|
||||
}
|
||||
|
||||
|
|
|
@ -274,10 +274,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( CharT aChar ) { do_AssignFromElement(aChar); return *this; }
|
||||
|
||||
void Assign( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); }
|
||||
void Assign( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AssignFromPromise(aReadable) : do_AssignFromReadable(aReadable); }
|
||||
// void Assign( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AssignFromIterators(aStart, aEnd); }
|
||||
void Assign( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); }
|
||||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -290,10 +292,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator+=( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const nsPromiseReadable<CharT>& aReadable ) { Append(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( CharT aChar ) { do_AppendFromElement(aChar); return *this; }
|
||||
|
||||
void Append( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); }
|
||||
void Append( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AppendFromPromise(aReadable) : do_AppendFromReadable(aReadable); }
|
||||
// void Append( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AppendFromIterators(aStart, aEnd); }
|
||||
void Append( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); }
|
||||
void Append( const CharT* aPtr, PRUint32 aLength ) { do_AppendFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -307,6 +311,7 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
void Insert( const basic_nsAReadableString<CharT>& aReadable, PRUint32 atPosition ) { do_InsertFromReadable(aReadable, atPosition); }
|
||||
void Insert( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition ) { aReadable.Promises(*this) ? InsertFromPromise(aReadable, atPosition) : do_InsertFromReadable(aReadable, atPosition); }
|
||||
// void Insert( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd, PRUint32 atPosition ) { do_InsertFromIterators(aStart, aEnd, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition ) { do_InsertFromElementPtr(aPtr, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition, PRUint32 aLength ) { do_InsertFromElementPtrLength(aPtr, atPosition, aLength); }
|
||||
|
@ -318,8 +323,12 @@ class basic_nsAWritableString
|
|||
|
||||
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& );
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReadable ) { do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? ReplaceFromPromise(cutStart, cutLength, aReadable) : do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
// void Replace( PRUint32, PRUint32, const nsReadingIterator<CharT>&, const nsReadingIterator<CharT>& );
|
||||
// void Replace( PRUint32, PRUint32, const CharT* );
|
||||
// void Replace( PRUint32, PRUint32, const CharT*, PRUint32 );
|
||||
// void Replace( PRUint32, PRUint32, CharT );
|
||||
|
||||
private:
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
|
@ -330,26 +339,37 @@ class basic_nsAWritableString
|
|||
void operator+= ( incompatible_char_type );
|
||||
void Append ( incompatible_char_type );
|
||||
void Insert ( incompatible_char_type, PRUint32 );
|
||||
// void Replace ( PRUint32, PRUint32, incompatible_char_type );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void do_AssignFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AssignFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AssignFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AssignFromElementPtr( const CharT* );
|
||||
virtual void do_AssignFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AssignFromElement( CharT );
|
||||
|
||||
virtual void do_AppendFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AppendFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AppendFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AppendFromElementPtr( const CharT* );
|
||||
virtual void do_AppendFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AppendFromElement( CharT );
|
||||
|
||||
virtual void do_InsertFromReadable( const basic_nsAReadableString<CharT>&, PRUint32 );
|
||||
void InsertFromPromise( const nsPromiseReadable<CharT>&, PRUint32 );
|
||||
// virtual void do_InsertFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT>, PRUint32 );
|
||||
virtual void do_InsertFromElementPtr( const CharT*, PRUint32 );
|
||||
virtual void do_InsertFromElementPtrLength( const CharT*, PRUint32, PRUint32 );
|
||||
virtual void do_InsertFromElement( CharT, PRUint32 );
|
||||
|
||||
virtual void do_ReplaceFromReadable( PRUint32, PRUint32, const basic_nsAReadableString<CharT>& );
|
||||
void ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_ReplaceFromIterators( ... );
|
||||
// virtual void do_ReplaceFromElementPtr( ... );
|
||||
// virtual void do_ReplaceFromElementPtrLength( ... );
|
||||
// virtual void do_ReplaceFromElement( ... );
|
||||
};
|
||||
|
||||
|
||||
|
@ -410,6 +430,19 @@ basic_nsAWritableString<CharT>::do_AssignFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting());
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AssignFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AssignFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -456,6 +489,19 @@ basic_nsAWritableString<CharT>::do_AppendFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AppendFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AppendFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -511,6 +557,19 @@ basic_nsAWritableString<CharT>::do_InsertFromReadable( const basic_nsAReadableSt
|
|||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(atPosition));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::InsertFromPromise( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_InsertFromElementPtrLength(buffer, atPosition, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::do_InsertFromElementPtr( const CharT* aPtr, PRUint32 atPosition )
|
||||
|
@ -554,7 +613,7 @@ basic_nsAWritableString<CharT>::Cut( PRUint32 cutStart, PRUint32 cutLength )
|
|||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
basic_nsAWritableString<CharT>::do_ReplaceFromReadable( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
{
|
||||
PRUint32 oldLength = Length();
|
||||
|
||||
|
@ -576,6 +635,19 @@ basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength,
|
|||
copy_string(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_ReplaceFromReadable(cutStart, cutLength, basic_nsLiteralString<CharT>(buffer, length));
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -336,6 +336,14 @@ class basic_nsAReadableString
|
|||
// protected:
|
||||
virtual const void* Implementation() const;
|
||||
virtual const CharT* GetReadableFragment( nsReadableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return &aString == this; }
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
PRUint32 CountChar( incompatible_char_type ) const;
|
||||
// in Compare( incompatible_char_type ) const;
|
||||
// PRBool Equals( incompatible_char_type ) const;
|
||||
};
|
||||
|
||||
template <class CharT>
|
||||
|
@ -513,7 +521,7 @@ basic_nsAReadableString<CharT>::CountChar( CharT c ) const
|
|||
nsReadingIterator<CharT> iter( BeginReading() );
|
||||
for (;;)
|
||||
{
|
||||
PRUint32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
PRInt32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
result += PRUint32(count(iter.operator->(), iter.operator->()+lengthToExamineInThisFragment, c));
|
||||
if ( !(lengthToExamine -= lengthToExamineInThisFragment) )
|
||||
return result;
|
||||
|
@ -750,9 +758,11 @@ basic_nsLiteralChar<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFra
|
|||
// nsPromiseConcatenation
|
||||
//
|
||||
|
||||
template <class CharT> class nsPromiseReadable : public basic_nsAReadableString<CharT> { };
|
||||
|
||||
template <class CharT>
|
||||
class nsPromiseConcatenation
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS
|
||||
|
||||
|
@ -807,6 +817,7 @@ class nsPromiseConcatenation
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
||||
nsPromiseConcatenation<CharT> operator+( const basic_nsAReadableString<CharT>& rhs ) const;
|
||||
|
||||
|
@ -829,6 +840,13 @@ nsPromiseConcatenation<CharT>::Length() const
|
|||
return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length();
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
PRBool
|
||||
nsPromiseConcatenation<CharT>::Promises( const basic_nsAReadableString<CharT>& aString ) const
|
||||
{
|
||||
return mStrings[0]->Promises(aString) || mStrings[1]->Promises(aString);
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
const CharT*
|
||||
nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const
|
||||
|
@ -866,15 +884,15 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
}
|
||||
|
||||
const CharT* result;
|
||||
bool done;
|
||||
PRBool done;
|
||||
do
|
||||
{
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition);
|
||||
|
||||
if ( !result )
|
||||
{
|
||||
done = false;
|
||||
done = PR_FALSE;
|
||||
if ( aRequest == kNextFragment && whichString == kLeftString )
|
||||
{
|
||||
aRequest = kFirstFragment;
|
||||
|
@ -886,7 +904,7 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
whichString = SetLeftStringInFragment(aFragment);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
}
|
||||
}
|
||||
while ( !done );
|
||||
|
@ -912,7 +930,7 @@ nsPromiseConcatenation<CharT>::operator+( const basic_nsAReadableString<CharT>&
|
|||
|
||||
template <class CharT>
|
||||
class nsPromiseSubstring
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS (mostly)
|
||||
|
||||
|
@ -935,6 +953,7 @@ class nsPromiseSubstring
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
private:
|
||||
const basic_nsAReadableString<CharT>& mString;
|
||||
|
@ -1037,6 +1056,11 @@ template <class CharT>
|
|||
nsPromiseSubstring<CharT>
|
||||
Substring( const basic_nsAReadableString<CharT>& aString, PRUint32 aStartPos, PRUint32 aSubstringLength )
|
||||
{
|
||||
#if 0
|
||||
// signatures don't work, but consider this twist to help in assignments
|
||||
if ( aSubstringLength == aString.Length() && aStartPos == 0 )
|
||||
return aString;
|
||||
#endif
|
||||
return nsPromiseSubstring<CharT>(aString, aStartPos, aSubstringLength);
|
||||
}
|
||||
|
||||
|
|
|
@ -274,10 +274,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( CharT aChar ) { do_AssignFromElement(aChar); return *this; }
|
||||
|
||||
void Assign( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); }
|
||||
void Assign( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AssignFromPromise(aReadable) : do_AssignFromReadable(aReadable); }
|
||||
// void Assign( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AssignFromIterators(aStart, aEnd); }
|
||||
void Assign( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); }
|
||||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -290,10 +292,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator+=( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const nsPromiseReadable<CharT>& aReadable ) { Append(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( CharT aChar ) { do_AppendFromElement(aChar); return *this; }
|
||||
|
||||
void Append( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); }
|
||||
void Append( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AppendFromPromise(aReadable) : do_AppendFromReadable(aReadable); }
|
||||
// void Append( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AppendFromIterators(aStart, aEnd); }
|
||||
void Append( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); }
|
||||
void Append( const CharT* aPtr, PRUint32 aLength ) { do_AppendFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -307,6 +311,7 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
void Insert( const basic_nsAReadableString<CharT>& aReadable, PRUint32 atPosition ) { do_InsertFromReadable(aReadable, atPosition); }
|
||||
void Insert( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition ) { aReadable.Promises(*this) ? InsertFromPromise(aReadable, atPosition) : do_InsertFromReadable(aReadable, atPosition); }
|
||||
// void Insert( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd, PRUint32 atPosition ) { do_InsertFromIterators(aStart, aEnd, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition ) { do_InsertFromElementPtr(aPtr, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition, PRUint32 aLength ) { do_InsertFromElementPtrLength(aPtr, atPosition, aLength); }
|
||||
|
@ -318,8 +323,12 @@ class basic_nsAWritableString
|
|||
|
||||
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& );
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReadable ) { do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? ReplaceFromPromise(cutStart, cutLength, aReadable) : do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
// void Replace( PRUint32, PRUint32, const nsReadingIterator<CharT>&, const nsReadingIterator<CharT>& );
|
||||
// void Replace( PRUint32, PRUint32, const CharT* );
|
||||
// void Replace( PRUint32, PRUint32, const CharT*, PRUint32 );
|
||||
// void Replace( PRUint32, PRUint32, CharT );
|
||||
|
||||
private:
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
|
@ -330,26 +339,37 @@ class basic_nsAWritableString
|
|||
void operator+= ( incompatible_char_type );
|
||||
void Append ( incompatible_char_type );
|
||||
void Insert ( incompatible_char_type, PRUint32 );
|
||||
// void Replace ( PRUint32, PRUint32, incompatible_char_type );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void do_AssignFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AssignFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AssignFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AssignFromElementPtr( const CharT* );
|
||||
virtual void do_AssignFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AssignFromElement( CharT );
|
||||
|
||||
virtual void do_AppendFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AppendFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AppendFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AppendFromElementPtr( const CharT* );
|
||||
virtual void do_AppendFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AppendFromElement( CharT );
|
||||
|
||||
virtual void do_InsertFromReadable( const basic_nsAReadableString<CharT>&, PRUint32 );
|
||||
void InsertFromPromise( const nsPromiseReadable<CharT>&, PRUint32 );
|
||||
// virtual void do_InsertFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT>, PRUint32 );
|
||||
virtual void do_InsertFromElementPtr( const CharT*, PRUint32 );
|
||||
virtual void do_InsertFromElementPtrLength( const CharT*, PRUint32, PRUint32 );
|
||||
virtual void do_InsertFromElement( CharT, PRUint32 );
|
||||
|
||||
virtual void do_ReplaceFromReadable( PRUint32, PRUint32, const basic_nsAReadableString<CharT>& );
|
||||
void ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_ReplaceFromIterators( ... );
|
||||
// virtual void do_ReplaceFromElementPtr( ... );
|
||||
// virtual void do_ReplaceFromElementPtrLength( ... );
|
||||
// virtual void do_ReplaceFromElement( ... );
|
||||
};
|
||||
|
||||
|
||||
|
@ -410,6 +430,19 @@ basic_nsAWritableString<CharT>::do_AssignFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting());
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AssignFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AssignFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -456,6 +489,19 @@ basic_nsAWritableString<CharT>::do_AppendFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AppendFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AppendFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -511,6 +557,19 @@ basic_nsAWritableString<CharT>::do_InsertFromReadable( const basic_nsAReadableSt
|
|||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(atPosition));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::InsertFromPromise( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_InsertFromElementPtrLength(buffer, atPosition, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::do_InsertFromElementPtr( const CharT* aPtr, PRUint32 atPosition )
|
||||
|
@ -554,7 +613,7 @@ basic_nsAWritableString<CharT>::Cut( PRUint32 cutStart, PRUint32 cutLength )
|
|||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
basic_nsAWritableString<CharT>::do_ReplaceFromReadable( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
{
|
||||
PRUint32 oldLength = Length();
|
||||
|
||||
|
@ -576,6 +635,19 @@ basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength,
|
|||
copy_string(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_ReplaceFromReadable(cutStart, cutLength, basic_nsLiteralString<CharT>(buffer, length));
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -336,6 +336,14 @@ class basic_nsAReadableString
|
|||
// protected:
|
||||
virtual const void* Implementation() const;
|
||||
virtual const CharT* GetReadableFragment( nsReadableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) const = 0;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return &aString == this; }
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
PRUint32 CountChar( incompatible_char_type ) const;
|
||||
// in Compare( incompatible_char_type ) const;
|
||||
// PRBool Equals( incompatible_char_type ) const;
|
||||
};
|
||||
|
||||
template <class CharT>
|
||||
|
@ -513,7 +521,7 @@ basic_nsAReadableString<CharT>::CountChar( CharT c ) const
|
|||
nsReadingIterator<CharT> iter( BeginReading() );
|
||||
for (;;)
|
||||
{
|
||||
PRUint32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
PRInt32 lengthToExamineInThisFragment = iter.size_forward();
|
||||
result += PRUint32(count(iter.operator->(), iter.operator->()+lengthToExamineInThisFragment, c));
|
||||
if ( !(lengthToExamine -= lengthToExamineInThisFragment) )
|
||||
return result;
|
||||
|
@ -750,9 +758,11 @@ basic_nsLiteralChar<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFra
|
|||
// nsPromiseConcatenation
|
||||
//
|
||||
|
||||
template <class CharT> class nsPromiseReadable : public basic_nsAReadableString<CharT> { };
|
||||
|
||||
template <class CharT>
|
||||
class nsPromiseConcatenation
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS
|
||||
|
||||
|
@ -807,6 +817,7 @@ class nsPromiseConcatenation
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
||||
nsPromiseConcatenation<CharT> operator+( const basic_nsAReadableString<CharT>& rhs ) const;
|
||||
|
||||
|
@ -829,6 +840,13 @@ nsPromiseConcatenation<CharT>::Length() const
|
|||
return mStrings[kLeftString]->Length() + mStrings[kRightString]->Length();
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
PRBool
|
||||
nsPromiseConcatenation<CharT>::Promises( const basic_nsAReadableString<CharT>& aString ) const
|
||||
{
|
||||
return mStrings[0]->Promises(aString) || mStrings[1]->Promises(aString);
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
const CharT*
|
||||
nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFragment, nsFragmentRequest aRequest, PRUint32 aPosition ) const
|
||||
|
@ -866,15 +884,15 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
}
|
||||
|
||||
const CharT* result;
|
||||
bool done;
|
||||
PRBool done;
|
||||
do
|
||||
{
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
result = mStrings[whichString]->GetReadableFragment(aFragment, aRequest, aPosition);
|
||||
|
||||
if ( !result )
|
||||
{
|
||||
done = false;
|
||||
done = PR_FALSE;
|
||||
if ( aRequest == kNextFragment && whichString == kLeftString )
|
||||
{
|
||||
aRequest = kFirstFragment;
|
||||
|
@ -886,7 +904,7 @@ nsPromiseConcatenation<CharT>::GetReadableFragment( nsReadableFragment<CharT>& a
|
|||
whichString = SetLeftStringInFragment(aFragment);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
done = PR_TRUE;
|
||||
}
|
||||
}
|
||||
while ( !done );
|
||||
|
@ -912,7 +930,7 @@ nsPromiseConcatenation<CharT>::operator+( const basic_nsAReadableString<CharT>&
|
|||
|
||||
template <class CharT>
|
||||
class nsPromiseSubstring
|
||||
: public basic_nsAReadableString<CharT>
|
||||
: public nsPromiseReadable<CharT>
|
||||
/*
|
||||
NOT FOR USE BY HUMANS (mostly)
|
||||
|
||||
|
@ -935,6 +953,7 @@ class nsPromiseSubstring
|
|||
}
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
private:
|
||||
const basic_nsAReadableString<CharT>& mString;
|
||||
|
@ -1037,6 +1056,11 @@ template <class CharT>
|
|||
nsPromiseSubstring<CharT>
|
||||
Substring( const basic_nsAReadableString<CharT>& aString, PRUint32 aStartPos, PRUint32 aSubstringLength )
|
||||
{
|
||||
#if 0
|
||||
// signatures don't work, but consider this twist to help in assignments
|
||||
if ( aSubstringLength == aString.Length() && aStartPos == 0 )
|
||||
return aString;
|
||||
#endif
|
||||
return nsPromiseSubstring<CharT>(aString, aStartPos, aSubstringLength);
|
||||
}
|
||||
|
||||
|
|
|
@ -274,10 +274,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( CharT aChar ) { do_AssignFromElement(aChar); return *this; }
|
||||
|
||||
void Assign( const basic_nsAReadableString<CharT>& aReadable ) { do_AssignFromReadable(aReadable); }
|
||||
void Assign( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AssignFromPromise(aReadable) : do_AssignFromReadable(aReadable); }
|
||||
// void Assign( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AssignFromIterators(aStart, aEnd); }
|
||||
void Assign( const CharT* aPtr ) { do_AssignFromElementPtr(aPtr); }
|
||||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -290,10 +292,12 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
basic_nsAWritableString<CharT>& operator+=( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const nsPromiseReadable<CharT>& aReadable ) { Append(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator+=( CharT aChar ) { do_AppendFromElement(aChar); return *this; }
|
||||
|
||||
void Append( const basic_nsAReadableString<CharT>& aReadable ) { do_AppendFromReadable(aReadable); }
|
||||
void Append( const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? AppendFromPromise(aReadable) : do_AppendFromReadable(aReadable); }
|
||||
// void Append( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd ) { do_AppendFromIterators(aStart, aEnd); }
|
||||
void Append( const CharT* aPtr ) { do_AppendFromElementPtr(aPtr); }
|
||||
void Append( const CharT* aPtr, PRUint32 aLength ) { do_AppendFromElementPtrLength(aPtr, aLength); }
|
||||
|
@ -307,6 +311,7 @@ class basic_nsAWritableString
|
|||
//
|
||||
|
||||
void Insert( const basic_nsAReadableString<CharT>& aReadable, PRUint32 atPosition ) { do_InsertFromReadable(aReadable, atPosition); }
|
||||
void Insert( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition ) { aReadable.Promises(*this) ? InsertFromPromise(aReadable, atPosition) : do_InsertFromReadable(aReadable, atPosition); }
|
||||
// void Insert( const nsReadingIterator<CharT>& aStart, const nsReadingIterator<CharT>& aEnd, PRUint32 atPosition ) { do_InsertFromIterators(aStart, aEnd, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition ) { do_InsertFromElementPtr(aPtr, atPosition); }
|
||||
void Insert( const CharT* aPtr, PRUint32 atPosition, PRUint32 aLength ) { do_InsertFromElementPtrLength(aPtr, atPosition, aLength); }
|
||||
|
@ -318,8 +323,12 @@ class basic_nsAWritableString
|
|||
|
||||
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& );
|
||||
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReadable ) { do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
void Replace( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable ) { aReadable.Promises(*this) ? ReplaceFromPromise(cutStart, cutLength, aReadable) : do_ReplaceFromReadable(cutStart, cutLength, aReadable); }
|
||||
// void Replace( PRUint32, PRUint32, const nsReadingIterator<CharT>&, const nsReadingIterator<CharT>& );
|
||||
// void Replace( PRUint32, PRUint32, const CharT* );
|
||||
// void Replace( PRUint32, PRUint32, const CharT*, PRUint32 );
|
||||
// void Replace( PRUint32, PRUint32, CharT );
|
||||
|
||||
private:
|
||||
typedef typename nsCharTraits<CharT>::incompatible_char_type incompatible_char_type;
|
||||
|
@ -330,26 +339,37 @@ class basic_nsAWritableString
|
|||
void operator+= ( incompatible_char_type );
|
||||
void Append ( incompatible_char_type );
|
||||
void Insert ( incompatible_char_type, PRUint32 );
|
||||
// void Replace ( PRUint32, PRUint32, incompatible_char_type );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void do_AssignFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AssignFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AssignFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AssignFromElementPtr( const CharT* );
|
||||
virtual void do_AssignFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AssignFromElement( CharT );
|
||||
|
||||
virtual void do_AppendFromReadable( const basic_nsAReadableString<CharT>& );
|
||||
void AppendFromPromise( const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_AppendFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT> );
|
||||
virtual void do_AppendFromElementPtr( const CharT* );
|
||||
virtual void do_AppendFromElementPtrLength( const CharT*, PRUint32 );
|
||||
virtual void do_AppendFromElement( CharT );
|
||||
|
||||
virtual void do_InsertFromReadable( const basic_nsAReadableString<CharT>&, PRUint32 );
|
||||
void InsertFromPromise( const nsPromiseReadable<CharT>&, PRUint32 );
|
||||
// virtual void do_InsertFromIterators( nsReadingIterator<CharT>, nsReadingIterator<CharT>, PRUint32 );
|
||||
virtual void do_InsertFromElementPtr( const CharT*, PRUint32 );
|
||||
virtual void do_InsertFromElementPtrLength( const CharT*, PRUint32, PRUint32 );
|
||||
virtual void do_InsertFromElement( CharT, PRUint32 );
|
||||
|
||||
virtual void do_ReplaceFromReadable( PRUint32, PRUint32, const basic_nsAReadableString<CharT>& );
|
||||
void ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& );
|
||||
// virtual void do_ReplaceFromIterators( ... );
|
||||
// virtual void do_ReplaceFromElementPtr( ... );
|
||||
// virtual void do_ReplaceFromElementPtrLength( ... );
|
||||
// virtual void do_ReplaceFromElement( ... );
|
||||
};
|
||||
|
||||
|
||||
|
@ -410,6 +430,19 @@ basic_nsAWritableString<CharT>::do_AssignFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting());
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AssignFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AssignFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -456,6 +489,19 @@ basic_nsAWritableString<CharT>::do_AppendFromReadable( const basic_nsAReadableSt
|
|||
copy_string(rhs.BeginReading(), rhs.EndReading(), BeginWriting(oldLength));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::AppendFromPromise( const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_AppendFromElementPtrLength(buffer, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <class CharT>
|
||||
void
|
||||
|
@ -511,6 +557,19 @@ basic_nsAWritableString<CharT>::do_InsertFromReadable( const basic_nsAReadableSt
|
|||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), BeginWriting(atPosition));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::InsertFromPromise( const nsPromiseReadable<CharT>& aReadable, PRUint32 atPosition )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_InsertFromElementPtrLength(buffer, atPosition, length);
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::do_InsertFromElementPtr( const CharT* aPtr, PRUint32 atPosition )
|
||||
|
@ -554,7 +613,7 @@ basic_nsAWritableString<CharT>::Cut( PRUint32 cutStart, PRUint32 cutLength )
|
|||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
basic_nsAWritableString<CharT>::do_ReplaceFromReadable( PRUint32 cutStart, PRUint32 cutLength, const basic_nsAReadableString<CharT>& aReplacement )
|
||||
{
|
||||
PRUint32 oldLength = Length();
|
||||
|
||||
|
@ -576,6 +635,19 @@ basic_nsAWritableString<CharT>::Replace( PRUint32 cutStart, PRUint32 cutLength,
|
|||
copy_string(aReplacement.BeginReading(), aReplacement.EndReading(), BeginWriting(cutStart));
|
||||
}
|
||||
|
||||
template <class CharT>
|
||||
void
|
||||
basic_nsAWritableString<CharT>::ReplaceFromPromise( PRUint32 cutStart, PRUint32 cutLength, const nsPromiseReadable<CharT>& aReadable )
|
||||
{
|
||||
PRUint32 length = aReadable.Length();
|
||||
if ( CharT* buffer = new CharT[length] )
|
||||
{
|
||||
copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
|
||||
do_ReplaceFromReadable(cutStart, cutLength, basic_nsLiteralString<CharT>(buffer, length));
|
||||
delete buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
|
Загрузка…
Ссылка в новой задаче