diff --git a/mozilla/base/src/nsStr.cpp b/mozilla/base/src/nsStr.cpp index 4aebbbfe861..885a285a2c5 100644 --- a/mozilla/base/src/nsStr.cpp +++ b/mozilla/base/src/nsStr.cpp @@ -66,12 +66,12 @@ char* GetSharedEmptyBuffer() { * @return */ void nsStr::Initialize(nsStr& aDest,eCharSize aCharSize) { - aDest.mStr.mCharBuf=GetSharedEmptyBuffer(); + aDest.mStr=GetSharedEmptyBuffer(); aDest.mLength=0; aDest.mCapacity=0; aDest.mMultibyte=aCharSize; aDest.mOwnsBuffer=0; - NS_ASSERTION(aDest.mStr.mCharBuf[0]==0,kFoolMsg); + NS_ASSERTION(aDest.mStr[0]==0,kFoolMsg); } /** @@ -97,7 +97,7 @@ nsIMemoryAgent* GetDefaultAgent(void){ * @return */ void nsStr::Destroy(nsStr& aDest,nsIMemoryAgent* anAgent) { - if((aDest.mStr.mCharBuf) && (aDest.mStr.mCharBuf!=GetSharedEmptyBuffer())) { + if((aDest.mStr) && (aDest.mStr!=GetSharedEmptyBuffer())) { if(!anAgent) anAgent=GetDefaultAgent(); @@ -119,7 +119,7 @@ void nsStr::Destroy(nsStr& aDest,nsIMemoryAgent* anAgent) { PRUnichar nsStr::GetCharAt(const nsStr& aDest,PRUint32 anIndex) { PRUnichar result=0; if((anIndex>=0) && (anIndexFree(aDest); aDest.mStr = theTempStr.mStr; - theTempStr.mStr.mCharBuf=0; //make sure to null this out so that you don't lose the buffer you just stole... + theTempStr.mStr=0; //make sure to null this out so that you don't lose the buffer you just stole... aDest.mLength=theTempStr.mLength; aDest.mCapacity=theTempStr.mCapacity; aDest.mOwnsBuffer=theTempStr.mOwnsBuffer; @@ -198,7 +198,7 @@ void nsStr::Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 a } //now append new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDest.mLength,aSource.mStr.mCharBuf,anOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDest.mLength,aSource.mStr,anOffset,theLength); aDest.mLength+=theLength; AddNullTerminator(aDest); @@ -235,10 +235,10 @@ void nsStr::Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUin GrowCapacity(aDest,aDest.mLength+theLength,anAgent); //shift the chars right by theDelta... - (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); //now insert new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDestOffset,aSource.mStr.mCharBuf,aSrcOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDestOffset,aSource.mStr,aSrcOffset,theLength); //finally, make sure to update the string length... aDest.mLength+=theLength; @@ -271,7 +271,7 @@ void nsStr::Delete(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,nsIMemoryAge //if you're here, it means we're cutting chars out of the middle of the string... //so shift the chars left by theLength... - (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); aDest.mLength-=theLength; } else Truncate(aDest,aDestOffset,anAgent); @@ -301,7 +301,7 @@ void nsStr::Truncate(nsStr& aDest,PRUint32 aDestOffset,nsIMemoryAgent* anAgent){ */ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { // somehow UnicharUtil return failed, fallback to the old ascii only code - gCaseConverters[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aToUpper); + gCaseConverters[aDest.mMultibyte](aDest.mStr,aDest.mLength,aToUpper); } /** @@ -311,7 +311,7 @@ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { * @return */ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const char* aCharSet){ - PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDestOffset,aCount,aCharSet); + PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr,aDestOffset,aCount,aCharSet); aDest.mLength=aNewLen; } @@ -323,7 +323,7 @@ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const ch * @return */ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -334,7 +334,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a * @return */ void nsStr::CompressSet(nsStr& aDest,const char* aSet,PRUint32 aChar,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -385,7 +385,7 @@ PRInt32 nsStr::FindSubstr(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnor * @return */ PRInt32 nsStr::FindChar(const nsStr& aDest,const PRUnichar aChar, PRBool aIgnoreCase,PRUint32 anOffset) { - PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,0,aChar,aIgnoreCase); + PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,0,aChar,aIgnoreCase); return result; } @@ -403,7 +403,7 @@ PRInt32 nsStr::FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnore while(++index=0) { PRUnichar theChar=GetCharAt(aDest,offset); - thePos=gRFindChars[aSet.mMultibyte](aSet.mStr.mCharBuf,aSet.mLength,0,theChar,aIgnoreCase); + thePos=gRFindChars[aSet.mMultibyte](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase); if(kNotFound!=thePos) return offset; } //while @@ -503,7 +503,7 @@ PRInt32 nsStr::Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PR } int maxlen=(aSource.mLength>mMultibyte)-1; mOwnsBuffer=aOwnsBuffer; @@ -73,7 +73,11 @@ struct nsBufDescriptor { PRUint32 mCapacity; PRBool mOwnsBuffer; eCharSize mMultibyte; - UStrPtr mStr; +// UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; @@ -265,7 +269,10 @@ struct nsStr { PRUint32 mCapacity: 30; PRUint32 mOwnsBuffer: 1; PRUint32 mUnused: 1; - UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; /************************************************************** @@ -296,8 +303,8 @@ inline void ToRange(PRUint32& aValue,PRUint32 aMin,PRUint32 aMax){ inline void AddNullTerminator(nsStr& aDest) { if(eTwoByte==aDest.mMultibyte) - aDest.mStr.mUnicharBuf[aDest.mLength]=0; - else aDest.mStr.mCharBuf[aDest.mLength]=0; + aDest.mUStr[aDest.mLength]=0; + else aDest.mStr[aDest.mLength]=0; } //---------------------------------------------------------------------------------------- @@ -331,17 +338,17 @@ public: aDest.mCapacity=theNewCapacity++; size_t theSize=(theNewCapacity<= theString.mStr.mCharBuf) { + while (cp >= theString.mStr) { theChar = toupper(*cp); if((theChar>='0') && (theChar<='9')){ break; @@ -687,7 +687,7 @@ PRInt32 nsString2::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const { } //now iterate the numeric chars and build our result - while(cp>=theString.mStr.mCharBuf) { + while(cp>=theString.mStr) { theChar=toupper(*cp--); if((theChar>='0') && (theChar<='9')){ digit=theChar-'0'; @@ -845,7 +845,7 @@ nsString2& nsString2::Append(const char* aCString,PRInt32 aCount) { if(aCString){ nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=(char*)aCString; + theTemp.mStr=(char*)aCString; theTemp.mLength=nsCRT::strlen(aCString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -864,7 +864,7 @@ nsString2& nsString2::Append(const PRUnichar* aString,PRInt32 aCount) { if(aString){ nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=(PRUnichar*)aString; + theTemp.mUStr=(PRUnichar*)aString; theTemp.mLength=nsCRT::strlen(aString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -884,7 +884,7 @@ nsString2& nsString2::Append(char aChar) { nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=buf; + theTemp.mStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -902,7 +902,7 @@ nsString2& nsString2::Append(PRUnichar aChar) { nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=buf; + theTemp.mUStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -1020,7 +1020,7 @@ nsString2& nsString2::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCou if(0GetUnicode()); + PRInt32 cmp=nsCRT::strcasecmp(mUStr,aAtom->GetUnicode()); result=PRBool(0==cmp); } return result; @@ -1573,7 +1573,6 @@ PRBool nsString2::IsDigit(PRUnichar aChar) { ****************************************************************************/ #if 0 - class nsStringRecycler { public: nsStringRecycler() : mDeque(0) { @@ -1634,7 +1633,7 @@ void nsString2::Recycle(nsString2* aString){ */ void nsString2::DebugDump(ostream& aStream) const { for(PRUint32 i=0;i=0) && (anIndexFree(aDest); aDest.mStr = theTempStr.mStr; - theTempStr.mStr.mCharBuf=0; //make sure to null this out so that you don't lose the buffer you just stole... + theTempStr.mStr=0; //make sure to null this out so that you don't lose the buffer you just stole... aDest.mLength=theTempStr.mLength; aDest.mCapacity=theTempStr.mCapacity; aDest.mOwnsBuffer=theTempStr.mOwnsBuffer; @@ -198,7 +198,7 @@ void nsStr::Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 a } //now append new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDest.mLength,aSource.mStr.mCharBuf,anOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDest.mLength,aSource.mStr,anOffset,theLength); aDest.mLength+=theLength; AddNullTerminator(aDest); @@ -235,10 +235,10 @@ void nsStr::Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUin GrowCapacity(aDest,aDest.mLength+theLength,anAgent); //shift the chars right by theDelta... - (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); //now insert new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDestOffset,aSource.mStr.mCharBuf,aSrcOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDestOffset,aSource.mStr,aSrcOffset,theLength); //finally, make sure to update the string length... aDest.mLength+=theLength; @@ -271,7 +271,7 @@ void nsStr::Delete(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,nsIMemoryAge //if you're here, it means we're cutting chars out of the middle of the string... //so shift the chars left by theLength... - (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); aDest.mLength-=theLength; } else Truncate(aDest,aDestOffset,anAgent); @@ -301,7 +301,7 @@ void nsStr::Truncate(nsStr& aDest,PRUint32 aDestOffset,nsIMemoryAgent* anAgent){ */ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { // somehow UnicharUtil return failed, fallback to the old ascii only code - gCaseConverters[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aToUpper); + gCaseConverters[aDest.mMultibyte](aDest.mStr,aDest.mLength,aToUpper); } /** @@ -311,7 +311,7 @@ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { * @return */ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const char* aCharSet){ - PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDestOffset,aCount,aCharSet); + PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr,aDestOffset,aCount,aCharSet); aDest.mLength=aNewLen; } @@ -323,7 +323,7 @@ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const ch * @return */ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -334,7 +334,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a * @return */ void nsStr::CompressSet(nsStr& aDest,const char* aSet,PRUint32 aChar,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -385,7 +385,7 @@ PRInt32 nsStr::FindSubstr(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnor * @return */ PRInt32 nsStr::FindChar(const nsStr& aDest,const PRUnichar aChar, PRBool aIgnoreCase,PRUint32 anOffset) { - PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,0,aChar,aIgnoreCase); + PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,0,aChar,aIgnoreCase); return result; } @@ -403,7 +403,7 @@ PRInt32 nsStr::FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnore while(++index=0) { PRUnichar theChar=GetCharAt(aDest,offset); - thePos=gRFindChars[aSet.mMultibyte](aSet.mStr.mCharBuf,aSet.mLength,0,theChar,aIgnoreCase); + thePos=gRFindChars[aSet.mMultibyte](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase); if(kNotFound!=thePos) return offset; } //while @@ -503,7 +503,7 @@ PRInt32 nsStr::Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PR } int maxlen=(aSource.mLength>mMultibyte)-1; mOwnsBuffer=aOwnsBuffer; @@ -73,7 +73,11 @@ struct nsBufDescriptor { PRUint32 mCapacity; PRBool mOwnsBuffer; eCharSize mMultibyte; - UStrPtr mStr; +// UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; @@ -265,7 +269,10 @@ struct nsStr { PRUint32 mCapacity: 30; PRUint32 mOwnsBuffer: 1; PRUint32 mUnused: 1; - UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; /************************************************************** @@ -296,8 +303,8 @@ inline void ToRange(PRUint32& aValue,PRUint32 aMin,PRUint32 aMax){ inline void AddNullTerminator(nsStr& aDest) { if(eTwoByte==aDest.mMultibyte) - aDest.mStr.mUnicharBuf[aDest.mLength]=0; - else aDest.mStr.mCharBuf[aDest.mLength]=0; + aDest.mUStr[aDest.mLength]=0; + else aDest.mStr[aDest.mLength]=0; } //---------------------------------------------------------------------------------------- @@ -331,17 +338,17 @@ public: aDest.mCapacity=theNewCapacity++; size_t theSize=(theNewCapacity<= theString.mStr.mCharBuf) { + while (cp >= theString.mStr) { theChar = toupper(*cp); if((theChar>='0') && (theChar<='9')){ break; @@ -687,7 +687,7 @@ PRInt32 nsString2::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const { } //now iterate the numeric chars and build our result - while(cp>=theString.mStr.mCharBuf) { + while(cp>=theString.mStr) { theChar=toupper(*cp--); if((theChar>='0') && (theChar<='9')){ digit=theChar-'0'; @@ -845,7 +845,7 @@ nsString2& nsString2::Append(const char* aCString,PRInt32 aCount) { if(aCString){ nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=(char*)aCString; + theTemp.mStr=(char*)aCString; theTemp.mLength=nsCRT::strlen(aCString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -864,7 +864,7 @@ nsString2& nsString2::Append(const PRUnichar* aString,PRInt32 aCount) { if(aString){ nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=(PRUnichar*)aString; + theTemp.mUStr=(PRUnichar*)aString; theTemp.mLength=nsCRT::strlen(aString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -884,7 +884,7 @@ nsString2& nsString2::Append(char aChar) { nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=buf; + theTemp.mStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -902,7 +902,7 @@ nsString2& nsString2::Append(PRUnichar aChar) { nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=buf; + theTemp.mUStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -1020,7 +1020,7 @@ nsString2& nsString2::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCou if(0GetUnicode()); + PRInt32 cmp=nsCRT::strcasecmp(mUStr,aAtom->GetUnicode()); result=PRBool(0==cmp); } return result; @@ -1573,7 +1573,6 @@ PRBool nsString2::IsDigit(PRUnichar aChar) { ****************************************************************************/ #if 0 - class nsStringRecycler { public: nsStringRecycler() : mDeque(0) { @@ -1634,7 +1633,7 @@ void nsString2::Recycle(nsString2* aString){ */ void nsString2::DebugDump(ostream& aStream) const { for(PRUint32 i=0;i=0) && (anIndexFree(aDest); aDest.mStr = theTempStr.mStr; - theTempStr.mStr.mCharBuf=0; //make sure to null this out so that you don't lose the buffer you just stole... + theTempStr.mStr=0; //make sure to null this out so that you don't lose the buffer you just stole... aDest.mLength=theTempStr.mLength; aDest.mCapacity=theTempStr.mCapacity; aDest.mOwnsBuffer=theTempStr.mOwnsBuffer; @@ -198,7 +198,7 @@ void nsStr::Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 a } //now append new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDest.mLength,aSource.mStr.mCharBuf,anOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDest.mLength,aSource.mStr,anOffset,theLength); aDest.mLength+=theLength; AddNullTerminator(aDest); @@ -235,10 +235,10 @@ void nsStr::Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUin GrowCapacity(aDest,aDest.mLength+theLength,anAgent); //shift the chars right by theDelta... - (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); //now insert new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDestOffset,aSource.mStr.mCharBuf,aSrcOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDestOffset,aSource.mStr,aSrcOffset,theLength); //finally, make sure to update the string length... aDest.mLength+=theLength; @@ -271,7 +271,7 @@ void nsStr::Delete(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,nsIMemoryAge //if you're here, it means we're cutting chars out of the middle of the string... //so shift the chars left by theLength... - (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); aDest.mLength-=theLength; } else Truncate(aDest,aDestOffset,anAgent); @@ -301,7 +301,7 @@ void nsStr::Truncate(nsStr& aDest,PRUint32 aDestOffset,nsIMemoryAgent* anAgent){ */ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { // somehow UnicharUtil return failed, fallback to the old ascii only code - gCaseConverters[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aToUpper); + gCaseConverters[aDest.mMultibyte](aDest.mStr,aDest.mLength,aToUpper); } /** @@ -311,7 +311,7 @@ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { * @return */ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const char* aCharSet){ - PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDestOffset,aCount,aCharSet); + PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr,aDestOffset,aCount,aCharSet); aDest.mLength=aNewLen; } @@ -323,7 +323,7 @@ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const ch * @return */ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -334,7 +334,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a * @return */ void nsStr::CompressSet(nsStr& aDest,const char* aSet,PRUint32 aChar,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -385,7 +385,7 @@ PRInt32 nsStr::FindSubstr(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnor * @return */ PRInt32 nsStr::FindChar(const nsStr& aDest,const PRUnichar aChar, PRBool aIgnoreCase,PRUint32 anOffset) { - PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,0,aChar,aIgnoreCase); + PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,0,aChar,aIgnoreCase); return result; } @@ -403,7 +403,7 @@ PRInt32 nsStr::FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnore while(++index=0) { PRUnichar theChar=GetCharAt(aDest,offset); - thePos=gRFindChars[aSet.mMultibyte](aSet.mStr.mCharBuf,aSet.mLength,0,theChar,aIgnoreCase); + thePos=gRFindChars[aSet.mMultibyte](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase); if(kNotFound!=thePos) return offset; } //while @@ -503,7 +503,7 @@ PRInt32 nsStr::Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PR } int maxlen=(aSource.mLength>mMultibyte)-1; mOwnsBuffer=aOwnsBuffer; @@ -73,7 +73,11 @@ struct nsBufDescriptor { PRUint32 mCapacity; PRBool mOwnsBuffer; eCharSize mMultibyte; - UStrPtr mStr; +// UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; @@ -265,7 +269,10 @@ struct nsStr { PRUint32 mCapacity: 30; PRUint32 mOwnsBuffer: 1; PRUint32 mUnused: 1; - UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; /************************************************************** @@ -296,8 +303,8 @@ inline void ToRange(PRUint32& aValue,PRUint32 aMin,PRUint32 aMax){ inline void AddNullTerminator(nsStr& aDest) { if(eTwoByte==aDest.mMultibyte) - aDest.mStr.mUnicharBuf[aDest.mLength]=0; - else aDest.mStr.mCharBuf[aDest.mLength]=0; + aDest.mUStr[aDest.mLength]=0; + else aDest.mStr[aDest.mLength]=0; } //---------------------------------------------------------------------------------------- @@ -331,17 +338,17 @@ public: aDest.mCapacity=theNewCapacity++; size_t theSize=(theNewCapacity<= theString.mStr.mCharBuf) { + while (cp >= theString.mStr) { theChar = toupper(*cp); if((theChar>='0') && (theChar<='9')){ break; @@ -687,7 +687,7 @@ PRInt32 nsString2::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const { } //now iterate the numeric chars and build our result - while(cp>=theString.mStr.mCharBuf) { + while(cp>=theString.mStr) { theChar=toupper(*cp--); if((theChar>='0') && (theChar<='9')){ digit=theChar-'0'; @@ -845,7 +845,7 @@ nsString2& nsString2::Append(const char* aCString,PRInt32 aCount) { if(aCString){ nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=(char*)aCString; + theTemp.mStr=(char*)aCString; theTemp.mLength=nsCRT::strlen(aCString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -864,7 +864,7 @@ nsString2& nsString2::Append(const PRUnichar* aString,PRInt32 aCount) { if(aString){ nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=(PRUnichar*)aString; + theTemp.mUStr=(PRUnichar*)aString; theTemp.mLength=nsCRT::strlen(aString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -884,7 +884,7 @@ nsString2& nsString2::Append(char aChar) { nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=buf; + theTemp.mStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -902,7 +902,7 @@ nsString2& nsString2::Append(PRUnichar aChar) { nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=buf; + theTemp.mUStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -1020,7 +1020,7 @@ nsString2& nsString2::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCou if(0GetUnicode()); + PRInt32 cmp=nsCRT::strcasecmp(mUStr,aAtom->GetUnicode()); result=PRBool(0==cmp); } return result; @@ -1573,7 +1573,6 @@ PRBool nsString2::IsDigit(PRUnichar aChar) { ****************************************************************************/ #if 0 - class nsStringRecycler { public: nsStringRecycler() : mDeque(0) { @@ -1634,7 +1633,7 @@ void nsString2::Recycle(nsString2* aString){ */ void nsString2::DebugDump(ostream& aStream) const { for(PRUint32 i=0;i=0) && (anIndexFree(aDest); aDest.mStr = theTempStr.mStr; - theTempStr.mStr.mCharBuf=0; //make sure to null this out so that you don't lose the buffer you just stole... + theTempStr.mStr=0; //make sure to null this out so that you don't lose the buffer you just stole... aDest.mLength=theTempStr.mLength; aDest.mCapacity=theTempStr.mCapacity; aDest.mOwnsBuffer=theTempStr.mOwnsBuffer; @@ -198,7 +198,7 @@ void nsStr::Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 a } //now append new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDest.mLength,aSource.mStr.mCharBuf,anOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDest.mLength,aSource.mStr,anOffset,theLength); aDest.mLength+=theLength; AddNullTerminator(aDest); @@ -235,10 +235,10 @@ void nsStr::Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUin GrowCapacity(aDest,aDest.mLength+theLength,anAgent); //shift the chars right by theDelta... - (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_TRUE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); //now insert new chars, starting at offset - (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr.mCharBuf,aDestOffset,aSource.mStr.mCharBuf,aSrcOffset,theLength); + (*gCopyChars[aSource.mMultibyte][aDest.mMultibyte])(aDest.mStr,aDestOffset,aSource.mStr,aSrcOffset,theLength); //finally, make sure to update the string length... aDest.mLength+=theLength; @@ -271,7 +271,7 @@ void nsStr::Delete(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,nsIMemoryAge //if you're here, it means we're cutting chars out of the middle of the string... //so shift the chars left by theLength... - (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr.mCharBuf,aDest.mLength,aDestOffset,theLength); + (*gShiftChars[aDest.mMultibyte][PR_FALSE])(aDest.mStr,aDest.mLength,aDestOffset,theLength); aDest.mLength-=theLength; } else Truncate(aDest,aDestOffset,anAgent); @@ -301,7 +301,7 @@ void nsStr::Truncate(nsStr& aDest,PRUint32 aDestOffset,nsIMemoryAgent* anAgent){ */ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { // somehow UnicharUtil return failed, fallback to the old ascii only code - gCaseConverters[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aToUpper); + gCaseConverters[aDest.mMultibyte](aDest.mStr,aDest.mLength,aToUpper); } /** @@ -311,7 +311,7 @@ void nsStr::ChangeCase(nsStr& aDest,PRBool aToUpper) { * @return */ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const char* aCharSet){ - PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDestOffset,aCount,aCharSet); + PRUint32 aNewLen=gStripChars[aDest.mMultibyte](aDest.mStr,aDestOffset,aCount,aCharSet); aDest.mLength=aNewLen; } @@ -323,7 +323,7 @@ void nsStr::StripChars(nsStr& aDest,PRUint32 aDestOffset,PRInt32 aCount,const ch * @return */ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gTrimChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -334,7 +334,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a * @return */ void nsStr::CompressSet(nsStr& aDest,const char* aSet,PRUint32 aChar,PRBool aEliminateLeading,PRBool aEliminateTrailing){ - PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); + PRUint32 aNewLen=gCompressChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,aSet,aChar,aEliminateLeading,aEliminateTrailing); aDest.mLength=aNewLen; } @@ -385,7 +385,7 @@ PRInt32 nsStr::FindSubstr(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnor * @return */ PRInt32 nsStr::FindChar(const nsStr& aDest,const PRUnichar aChar, PRBool aIgnoreCase,PRUint32 anOffset) { - PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr.mCharBuf,aDest.mLength,0,aChar,aIgnoreCase); + PRInt32 result=gFindChars[aDest.mMultibyte](aDest.mStr,aDest.mLength,0,aChar,aIgnoreCase); return result; } @@ -403,7 +403,7 @@ PRInt32 nsStr::FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnore while(++index=0) { PRUnichar theChar=GetCharAt(aDest,offset); - thePos=gRFindChars[aSet.mMultibyte](aSet.mStr.mCharBuf,aSet.mLength,0,theChar,aIgnoreCase); + thePos=gRFindChars[aSet.mMultibyte](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase); if(kNotFound!=thePos) return offset; } //while @@ -503,7 +503,7 @@ PRInt32 nsStr::Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PR } int maxlen=(aSource.mLength>mMultibyte)-1; mOwnsBuffer=aOwnsBuffer; @@ -73,7 +73,11 @@ struct nsBufDescriptor { PRUint32 mCapacity; PRBool mOwnsBuffer; eCharSize mMultibyte; - UStrPtr mStr; +// UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; @@ -265,7 +269,10 @@ struct nsStr { PRUint32 mCapacity: 30; PRUint32 mOwnsBuffer: 1; PRUint32 mUnused: 1; - UStrPtr mStr; + union { + char* mStr; + PRUnichar* mUStr; + }; }; /************************************************************** @@ -296,8 +303,8 @@ inline void ToRange(PRUint32& aValue,PRUint32 aMin,PRUint32 aMax){ inline void AddNullTerminator(nsStr& aDest) { if(eTwoByte==aDest.mMultibyte) - aDest.mStr.mUnicharBuf[aDest.mLength]=0; - else aDest.mStr.mCharBuf[aDest.mLength]=0; + aDest.mUStr[aDest.mLength]=0; + else aDest.mStr[aDest.mLength]=0; } //---------------------------------------------------------------------------------------- @@ -331,17 +338,17 @@ public: aDest.mCapacity=theNewCapacity++; size_t theSize=(theNewCapacity<= theString.mStr.mCharBuf) { + while (cp >= theString.mStr) { theChar = toupper(*cp); if((theChar>='0') && (theChar<='9')){ break; @@ -687,7 +687,7 @@ PRInt32 nsString2::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const { } //now iterate the numeric chars and build our result - while(cp>=theString.mStr.mCharBuf) { + while(cp>=theString.mStr) { theChar=toupper(*cp--); if((theChar>='0') && (theChar<='9')){ digit=theChar-'0'; @@ -845,7 +845,7 @@ nsString2& nsString2::Append(const char* aCString,PRInt32 aCount) { if(aCString){ nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=(char*)aCString; + theTemp.mStr=(char*)aCString; theTemp.mLength=nsCRT::strlen(aCString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -864,7 +864,7 @@ nsString2& nsString2::Append(const PRUnichar* aString,PRInt32 aCount) { if(aString){ nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=(PRUnichar*)aString; + theTemp.mUStr=(PRUnichar*)aString; theTemp.mLength=nsCRT::strlen(aString); if(-1==aCount) aCount=theTemp.mLength; nsStr::Append(*this,theTemp,0,aCount,mAgent); @@ -884,7 +884,7 @@ nsString2& nsString2::Append(char aChar) { nsStr theTemp; Initialize(theTemp,eOneByte); - theTemp.mStr.mCharBuf=buf; + theTemp.mStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -902,7 +902,7 @@ nsString2& nsString2::Append(PRUnichar aChar) { nsStr theTemp; Initialize(theTemp,eTwoByte); - theTemp.mStr.mUnicharBuf=buf; + theTemp.mUStr=buf; theTemp.mLength=1; nsStr::Append(*this,theTemp,0,1,mAgent); return *this; @@ -1020,7 +1020,7 @@ nsString2& nsString2::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCou if(0GetUnicode()); + PRInt32 cmp=nsCRT::strcasecmp(mUStr,aAtom->GetUnicode()); result=PRBool(0==cmp); } return result; @@ -1573,7 +1573,6 @@ PRBool nsString2::IsDigit(PRUnichar aChar) { ****************************************************************************/ #if 0 - class nsStringRecycler { public: nsStringRecycler() : mDeque(0) { @@ -1634,7 +1633,7 @@ void nsString2::Recycle(nsString2* aString){ */ void nsString2::DebugDump(ostream& aStream) const { for(PRUint32 i=0;i