fixes needed to get multi-fragment strings working; r|a=waterson

git-svn-id: svn://10.0.0.236/trunk@75978 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
scc%mozilla.org
2000-08-10 06:36:54 +00:00
parent fac6eb1451
commit e98f6c2c7c
9 changed files with 39 additions and 33 deletions

View File

@@ -64,7 +64,7 @@ struct nsReadableFragment
{
const CharT* mStart;
const CharT* mEnd;
PRUint32 mFragmentIdentifier;
void* mFragmentIdentifier;
nsReadableFragment()
: mStart(0), mEnd(0), mFragmentIdentifier(0)
@@ -104,9 +104,6 @@ class nsReadingIterator
const CharT* mPosition;
const basic_nsAReadableString<CharT>* mOwningString;
inline void normalize_forward();
inline void normalize_backward();
nsReadingIterator( const nsReadableFragment<CharT>& aFragment,
const CharT* aStartingPosition,
const basic_nsAReadableString<CharT>& aOwningString )
@@ -121,6 +118,9 @@ class nsReadingIterator
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
inline void normalize_forward();
inline void normalize_backward();
pointer
get() const
{
@@ -857,20 +857,20 @@ class nsPromiseConcatenation
int
GetCurrentStringFromFragment( const nsReadableFragment<CharT>& aFragment ) const
{
return (aFragment.mFragmentIdentifier & mFragmentIdentifierMask) ? kRightString : kLeftString;
return (NS_REINTERPRET_CAST(PRUint32, aFragment.mFragmentIdentifier) & mFragmentIdentifierMask) ? kRightString : kLeftString;
}
int
SetLeftStringInFragment( nsReadableFragment<CharT>& aFragment ) const
{
aFragment.mFragmentIdentifier &= ~mFragmentIdentifierMask;
aFragment.mFragmentIdentifier = NS_REINTERPRET_CAST(void*, NS_REINTERPRET_CAST(PRUint32, aFragment.mFragmentIdentifier) & ~mFragmentIdentifierMask);
return kLeftString;
}
int
SetRightStringInFragment( nsReadableFragment<CharT>& aFragment ) const
{
aFragment.mFragmentIdentifier |= mFragmentIdentifierMask;
aFragment.mFragmentIdentifier = NS_REINTERPRET_CAST(void*, NS_REINTERPRET_CAST(PRUint32, aFragment.mFragmentIdentifier) | mFragmentIdentifierMask);
return kRightString;
}

View File

@@ -37,7 +37,7 @@ struct nsWritableFragment
{
CharT* mStart;
CharT* mEnd;
PRUint32 mFragmentIdentifier;
void* mFragmentIdentifier;
nsWritableFragment()
: mStart(0), mEnd(0), mFragmentIdentifier(0)
@@ -66,9 +66,6 @@ class nsWritingIterator
CharT* mPosition;
basic_nsAWritableString<CharT>* mOwningString;
inline void normalize_forward();
inline void normalize_backward();
nsWritingIterator( nsWritableFragment<CharT>& aFragment,
CharT* aStartingPosition,
basic_nsAWritableString<CharT>& aOwningString )
@@ -83,6 +80,9 @@ class nsWritingIterator
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
inline void normalize_forward();
inline void normalize_backward();
pointer
get() const
{

View File

@@ -83,6 +83,8 @@ copy_string_backward( InputIterator first, InputIterator last, OutputIterator re
{
while ( first != last )
{
last.normalize_backward();
result.normalize_backward();
PRUint32 lengthToCopy = PRUint32( NS_MIN(last.size_backward(), result.size_backward()) );
if ( first.fragment().mStart == last.fragment().mStart )
lengthToCopy = NS_MIN(lengthToCopy, PRUint32(last.get() - first.get()));