diff --git a/mozilla/string/obsolete/bufferRoutines.h b/mozilla/string/obsolete/bufferRoutines.h index fc0be8c100c..41e6cd315eb 100644 --- a/mozilla/string/obsolete/bufferRoutines.h +++ b/mozilla/string/obsolete/bufferRoutines.h @@ -528,7 +528,7 @@ inline PRInt32 FindChar1(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset * @param aCount tells us how many characters to iterate through (which may be different than aLength); -1 means use full length. * @return index of pos if found, else -1 (kNotFound) */ -inline PRInt32 FindChar2(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset,const PRUnichar aChar,PRBool aIgnoreCase,PRInt32 aCount) { +inline PRInt32 FindChar2(const PRUnichar* aDest,PRUint32 aDestLength,PRInt32 anOffset,const PRUnichar aChar,PRBool aIgnoreCase,PRInt32 aCount) { #ifndef XPCOM_STANDALONE if(anOffset<0) @@ -541,7 +541,7 @@ inline PRInt32 FindChar2(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset if(0 */ -PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +static inline PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ PRInt32 result=0; if(aIgnoreCase) @@ -735,13 +732,13 @@ PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ PRInt32 result=0; #ifndef XPCOM_STANDALONE if(aIgnoreCase && NS_SUCCEEDED(NS_InitCaseConversion())) - gCaseConv->CaseInsensitiveCompare((PRUnichar*)aStr1, (PRUnichar*)aStr2, aCount, &result); - else result=nsCRT::strncmp((PRUnichar*)aStr1,(PRUnichar*)aStr2,aCount); + gCaseConv->CaseInsensitiveCompare(aStr1, aStr2, aCount, &result); + else result=nsCRT::strncmp(aStr1,aStr2,aCount); #else NS_ERROR("call not supported in XPCOM_STANDALONE"); #endif @@ -758,10 +755,10 @@ PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +static PRInt32 Compare2To1(const PRUnichar* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare2To1(const PRUnichar* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ #ifndef XPCOM_STANDALONE - PRUnichar* s1 = (PRUnichar*)aStr1; + const PRUnichar* s1 = aStr1; const char *s2 = aStr2; if (aIgnoreCase && NS_FAILED(NS_InitCaseConversion())) @@ -804,19 +801,12 @@ PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare1To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare1To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +static inline PRInt32 Compare1To2(const char* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare1To2(const char* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ return Compare2To1(aStr2, aStr1, aCount, aIgnoreCase) * -1; } -typedef PRInt32 (*CompareChars)(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -CompareChars gCompare[2][2]={ - {&Compare1To1,&Compare1To2}, - {&Compare2To1,&Compare2To2}, -}; - - //---------------------------------------------------------------------------------------- // // This set of methods is used compress char sequences in a buffer... diff --git a/mozilla/string/obsolete/nsStr.cpp b/mozilla/string/obsolete/nsStr.cpp index 77e2946e6c8..a8e6f461115 100644 --- a/mozilla/string/obsolete/nsStr.cpp +++ b/mozilla/string/obsolete/nsStr.cpp @@ -502,7 +502,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a if(aEliminateLeading) { while(++theIndex<=theMax) { PRUnichar theChar=GetCharAt(aDest,theIndex); - PRInt32 thePos=FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); + PRInt32 thePos=::FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); if(kNotFound==thePos) break; } @@ -523,7 +523,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a PRInt32 theNewLen=theIndex; while(--theIndex>=0) { PRUnichar theChar=GetCharAt(aDest,theIndex); //read at end now... - PRInt32 thePos=FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); + PRInt32 thePos=::FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); if(kNotFoundtheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); - if(aCount<0) - aCount = MaxInt(theMaxPos,1); - - if(0theMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const char* root = aDest.mStr; + const char* left = root+anOffset; + const char* last = left+aCount; + const char* max = root+theMaxPos; + const char* right = (lasttheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* left = root+anOffset; + const PRUnichar* last = left+aCount; + const PRUnichar* max = root+theMaxPos; + const PRUnichar* right = (lasttheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* left = root+anOffset; + const PRUnichar* last = left+aCount; + const PRUnichar* max = root+theMaxPos; + const PRUnichar* right = (last=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const char* root = aDest.mStr; + const char* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const char* rightmost = root+anOffset; + const char* min = rightmost-aCount + 1; + + const char* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const char* root = aDest.mStr; + const char* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const char* rightmost = root+anOffset; + const char* min = rightmost-aCount+1; + + const char* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const PRUnichar* rightmost = root+anOffset; + const PRUnichar* min = rightmost-aCount+1; + + const PRUnichar* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const PRUnichar* rightmost = root+anOffset; + const PRUnichar* min = rightmost-aCount+1; + + const PRUnichar* leftmost = (min=0) { PRUnichar theChar=GetCharAt(aDest,index); - thePos=gFindChars[aSet.mCharSize](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); + thePos=::FindChar1(aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); + if(kNotFound!=thePos) + return index; + } //while + } + return kNotFound; +} + +PRInt32 nsStr::RFindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset) { + + NS_ASSERTION(aSet.mCharSize == eTwoByte, "Must be 2 byte"); + + PRInt32 index=(0<=anOffset) ? anOffset : aDest.mLength; + PRInt32 thePos; + + //note that the search is inverted here. We're scanning aDest, one char at a time + //but doing the search against the given set. That's why we use 0 as the offset below. + if(0=0) { + PRUnichar theChar=GetCharAt(aDest,index); + thePos=::FindChar2(aSet.mUStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); if(kNotFound!=thePos) return index; } //while @@ -795,7 +1088,7 @@ PRInt32 nsStr::RFindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnor } // from the start of the old nsStr::StrCompare - now used as helper -// routines for nsStr::Compare1to1 and so forth +// routines for nsStr::Compare1To1 and so forth static inline PRInt32 GetCompareCount(const PRInt32 aDestLength, const PRInt32 aSourceLength, PRInt32 aCount) @@ -860,7 +1153,7 @@ PRInt32 nsStr::StrCompare1To2(const nsStr& aDest,const nsStr& aSource,PRInt32 aC NS_ASSERTION(aSource.mCharSize == eTwoByte, "Must be 2 byte"); if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare1To2(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare1To2(aDest.mStr, aSource.mUStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } @@ -874,7 +1167,7 @@ PRInt32 nsStr::StrCompare2To1(const nsStr& aDest,const nsStr& aSource,PRInt32 aC if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare2To1(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare2To1(aDest.mUStr, aSource.mStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } @@ -888,7 +1181,7 @@ PRInt32 nsStr::StrCompare2To2(const nsStr& aDest,const nsStr& aSource,PRInt32 aC if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare2To2(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare2To2(aDest.mUStr, aSource.mUStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } diff --git a/mozilla/string/obsolete/nsStr.h b/mozilla/string/obsolete/nsStr.h index 194d042bc6f..cd51847e8e8 100644 --- a/mozilla/string/obsolete/nsStr.h +++ b/mozilla/string/obsolete/nsStr.h @@ -443,14 +443,27 @@ struct NS_COM nsStr { * @param anOffset tells us where in the dest string to start searching * @return the index of the source (substr) in dest, or -1 (kNotFound) if not found. */ - static PRInt32 FindSubstr(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 FindChar(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); - - static PRInt32 RFindSubstr(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr1in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr1in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr2in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr2in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + + static PRInt32 FindChar1(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindChar2(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + + static PRInt32 FindCharInSet1(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + static PRInt32 FindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + + static PRInt32 RFindSubstr1in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr2in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr1in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr2in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindChar1(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); static PRInt32 RFindChar2(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 RFindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + + static PRInt32 RFindCharInSet1(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + static PRInt32 RFindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); static void Overwrite(nsStr& aDest,const nsStr& aSource,PRInt32 anOffset); diff --git a/mozilla/string/obsolete/nsString.cpp b/mozilla/string/obsolete/nsString.cpp index d3f860df819..ab80e91542a 100644 --- a/mozilla/string/obsolete/nsString.cpp +++ b/mozilla/string/obsolete/nsString.cpp @@ -85,29 +85,6 @@ nsCString::nsCString(const char* aCString,PRInt32 aLength) { Assign(aCString,aLength); } -#if 0 -/** - * This constructor accepts a unicode string - * @update gess 1/4/99 - * @param aString is a ptr to a unichar string - * @param aLength tells us how many chars to copy from given aString - */ -nsCString::nsCString(const PRUnichar* aString,PRInt32 aLength) { - Initialize(*this,eOneByte); - AssignWithConversion(aString,aLength); -} - -/** - * This constructor works for all other nsSTr derivatives - * @update gess 1/4/99 - * @param reference to another nsCString - */ -nsCString::nsCString(const nsStr &aString) { - Initialize(*this,eOneByte); - StrAssign(*this,aString,0,aString.mLength); -} -#endif - /** * This is our copy constructor * @update gess 1/4/99 @@ -246,34 +223,18 @@ PRBool nsCString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){ void nsCString::StripChar(PRUnichar aChar,PRInt32 anOffset){ if(mLength && (anOffsetGetUnicode(&unicode) != NS_OK || unicode == nsnull) return PR_FALSE; - cmp=Compare2To2((const char*)mUStr,(const char*)unicode, nsCRT::strlen(mUStr), aIgnoreCase); + cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr), aIgnoreCase); result=PRBool(0==cmp); } @@ -1695,29 +1675,6 @@ NS_ConvertUTF8toUCS2::Init( const nsACString& aCString ) NS_ASSERTION(count == mLength, "calculator calculated incorrect length"); } -#if 0 -/** - * Copy construct from ascii c-string - * @param aCString is a ptr to a 1-byte cstr - * @param aLength tells us how many chars to copy from aCString - */ -nsAutoString::nsAutoString(const char* aCString,PRInt32 aLength) : nsString() { - Initialize(*this,mBuffer,(sizeof(mBuffer)>>eTwoByte)-1,0,eTwoByte,PR_FALSE); - AddNullTerminator(*this); - Append(aCString,aLength); -} - -/** - * Copy construct from an nsStr - * @param - */ -nsAutoString::nsAutoString(const nsStr& aString) : nsString() { - Initialize(*this,mBuffer,(sizeof(mBuffer)>>eTwoByte)-1,0,eTwoByte,PR_FALSE); - AddNullTerminator(*this); - Append(aString); -} -#endif - /** * Default copy constructor */ diff --git a/mozilla/string/obsolete/nsString2.h b/mozilla/string/obsolete/nsString2.h index 612c59b95a3..e00a19f8148 100644 --- a/mozilla/string/obsolete/nsString2.h +++ b/mozilla/string/obsolete/nsString2.h @@ -325,7 +325,7 @@ public: * @return offset in string, or -1 (kNotFound) */ PRInt32 Find(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; - PRInt32 Find(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; + PRInt32 Find(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; @@ -351,7 +351,8 @@ public: */ PRInt32 FindCharInSet(const char* aString,PRInt32 anOffset=0) const; PRInt32 FindCharInSet(const PRUnichar* aString,PRInt32 anOffset=0) const; - PRInt32 FindCharInSet(const nsStr& aString,PRInt32 anOffset=0) const; + PRInt32 FindCharInSet(const nsString& aString,PRInt32 anOffset=0) const; + PRInt32 FindCharInSet(const nsCString& aString,PRInt32 anOffset=0) const; /** @@ -364,7 +365,7 @@ public: */ PRInt32 RFind(const char* aCString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; PRInt32 RFind(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; + PRInt32 RFind(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; PRInt32 RFind(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; @@ -389,7 +390,8 @@ public: */ PRInt32 RFindCharInSet(const char* aString,PRInt32 anOffset=-1) const; PRInt32 RFindCharInSet(const PRUnichar* aString,PRInt32 anOffset=-1) const; - PRInt32 RFindCharInSet(const nsStr& aString,PRInt32 anOffset=-1) const; + PRInt32 RFindCharInSet(const nsString& aString,PRInt32 anOffset=-1) const; + PRInt32 RFindCharInSet(const nsCString& aString,PRInt32 anOffset=-1) const; /********************************************************************** diff --git a/mozilla/xpcom/string/obsolete/bufferRoutines.h b/mozilla/xpcom/string/obsolete/bufferRoutines.h index fc0be8c100c..41e6cd315eb 100644 --- a/mozilla/xpcom/string/obsolete/bufferRoutines.h +++ b/mozilla/xpcom/string/obsolete/bufferRoutines.h @@ -528,7 +528,7 @@ inline PRInt32 FindChar1(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset * @param aCount tells us how many characters to iterate through (which may be different than aLength); -1 means use full length. * @return index of pos if found, else -1 (kNotFound) */ -inline PRInt32 FindChar2(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset,const PRUnichar aChar,PRBool aIgnoreCase,PRInt32 aCount) { +inline PRInt32 FindChar2(const PRUnichar* aDest,PRUint32 aDestLength,PRInt32 anOffset,const PRUnichar aChar,PRBool aIgnoreCase,PRInt32 aCount) { #ifndef XPCOM_STANDALONE if(anOffset<0) @@ -541,7 +541,7 @@ inline PRInt32 FindChar2(const char* aDest,PRUint32 aDestLength,PRInt32 anOffset if(0 */ -PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +static inline PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ PRInt32 result=0; if(aIgnoreCase) @@ -735,13 +732,13 @@ PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ PRInt32 result=0; #ifndef XPCOM_STANDALONE if(aIgnoreCase && NS_SUCCEEDED(NS_InitCaseConversion())) - gCaseConv->CaseInsensitiveCompare((PRUnichar*)aStr1, (PRUnichar*)aStr2, aCount, &result); - else result=nsCRT::strncmp((PRUnichar*)aStr1,(PRUnichar*)aStr2,aCount); + gCaseConv->CaseInsensitiveCompare(aStr1, aStr2, aCount, &result); + else result=nsCRT::strncmp(aStr1,aStr2,aCount); #else NS_ERROR("call not supported in XPCOM_STANDALONE"); #endif @@ -758,10 +755,10 @@ PRInt32 Compare2To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +static PRInt32 Compare2To1(const PRUnichar* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare2To1(const PRUnichar* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ #ifndef XPCOM_STANDALONE - PRUnichar* s1 = (PRUnichar*)aStr1; + const PRUnichar* s1 = aStr1; const char *s2 = aStr2; if (aIgnoreCase && NS_FAILED(NS_InitCaseConversion())) @@ -804,19 +801,12 @@ PRInt32 Compare2To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare1To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare1To2(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ +static inline PRInt32 Compare1To2(const char* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); +PRInt32 Compare1To2(const char* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ return Compare2To1(aStr2, aStr1, aCount, aIgnoreCase) * -1; } -typedef PRInt32 (*CompareChars)(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -CompareChars gCompare[2][2]={ - {&Compare1To1,&Compare1To2}, - {&Compare2To1,&Compare2To2}, -}; - - //---------------------------------------------------------------------------------------- // // This set of methods is used compress char sequences in a buffer... diff --git a/mozilla/xpcom/string/obsolete/nsStr.cpp b/mozilla/xpcom/string/obsolete/nsStr.cpp index 77e2946e6c8..a8e6f461115 100644 --- a/mozilla/xpcom/string/obsolete/nsStr.cpp +++ b/mozilla/xpcom/string/obsolete/nsStr.cpp @@ -502,7 +502,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a if(aEliminateLeading) { while(++theIndex<=theMax) { PRUnichar theChar=GetCharAt(aDest,theIndex); - PRInt32 thePos=FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); + PRInt32 thePos=::FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); if(kNotFound==thePos) break; } @@ -523,7 +523,7 @@ void nsStr::Trim(nsStr& aDest,const char* aSet,PRBool aEliminateLeading,PRBool a PRInt32 theNewLen=theIndex; while(--theIndex>=0) { PRUnichar theChar=GetCharAt(aDest,theIndex); //read at end now... - PRInt32 thePos=FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); + PRInt32 thePos=::FindChar1(aSet,theSetLen,0,theChar,PR_FALSE,theSetLen); if(kNotFoundtheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); - if(aCount<0) - aCount = MaxInt(theMaxPos,1); - - if(0theMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const char* root = aDest.mStr; + const char* left = root+anOffset; + const char* last = left+aCount; + const char* max = root+theMaxPos; + const char* right = (lasttheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* left = root+anOffset; + const PRUnichar* last = left+aCount; + const PRUnichar* max = root+theMaxPos; + const PRUnichar* right = (lasttheMaxPos) || (aTarget.mLength==0)) + return kNotFound; + + if(aCount<0) + aCount = MaxInt(theMaxPos,1); + + if (aCount <= 0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* left = root+anOffset; + const PRUnichar* last = left+aCount; + const PRUnichar* max = root+theMaxPos; + const PRUnichar* right = (last=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const char* root = aDest.mStr; + const char* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const char* rightmost = root+anOffset; + const char* min = rightmost-aCount + 1; + + const char* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const char* root = aDest.mStr; + const char* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const char* rightmost = root+anOffset; + const char* min = rightmost-aCount+1; + + const char* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const PRUnichar* rightmost = root+anOffset; + const PRUnichar* min = rightmost-aCount+1; + + const PRUnichar* leftmost = (min=aDest.mLength) || (aTarget.mLength==0)) + return kNotFound; + + if (aCount<=0) + return kNotFound; + + const PRUnichar* root = aDest.mUStr; + const PRUnichar* destLast = root+aDest.mLength; //pts to last char in aDest (likely null) + + const PRUnichar* rightmost = root+anOffset; + const PRUnichar* min = rightmost-aCount+1; + + const PRUnichar* leftmost = (min=0) { PRUnichar theChar=GetCharAt(aDest,index); - thePos=gFindChars[aSet.mCharSize](aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); + thePos=::FindChar1(aSet.mStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); + if(kNotFound!=thePos) + return index; + } //while + } + return kNotFound; +} + +PRInt32 nsStr::RFindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset) { + + NS_ASSERTION(aSet.mCharSize == eTwoByte, "Must be 2 byte"); + + PRInt32 index=(0<=anOffset) ? anOffset : aDest.mLength; + PRInt32 thePos; + + //note that the search is inverted here. We're scanning aDest, one char at a time + //but doing the search against the given set. That's why we use 0 as the offset below. + if(0=0) { + PRUnichar theChar=GetCharAt(aDest,index); + thePos=::FindChar2(aSet.mUStr,aSet.mLength,0,theChar,aIgnoreCase,aSet.mLength); if(kNotFound!=thePos) return index; } //while @@ -795,7 +1088,7 @@ PRInt32 nsStr::RFindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnor } // from the start of the old nsStr::StrCompare - now used as helper -// routines for nsStr::Compare1to1 and so forth +// routines for nsStr::Compare1To1 and so forth static inline PRInt32 GetCompareCount(const PRInt32 aDestLength, const PRInt32 aSourceLength, PRInt32 aCount) @@ -860,7 +1153,7 @@ PRInt32 nsStr::StrCompare1To2(const nsStr& aDest,const nsStr& aSource,PRInt32 aC NS_ASSERTION(aSource.mCharSize == eTwoByte, "Must be 2 byte"); if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare1To2(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare1To2(aDest.mStr, aSource.mUStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } @@ -874,7 +1167,7 @@ PRInt32 nsStr::StrCompare2To1(const nsStr& aDest,const nsStr& aSource,PRInt32 aC if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare2To1(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare2To1(aDest.mUStr, aSource.mStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } @@ -888,7 +1181,7 @@ PRInt32 nsStr::StrCompare2To2(const nsStr& aDest,const nsStr& aSource,PRInt32 aC if (aCount) { PRInt32 theCount = GetCompareCount(aDest.mLength, aSource.mLength, aCount); - PRInt32 result = Compare2To2(aDest.mStr, aSource.mStr, theCount, aIgnoreCase); + PRInt32 result = Compare2To2(aDest.mUStr, aSource.mUStr, theCount, aIgnoreCase); result = TranslateCompareResult(aDest.mLength, aSource.mLength, result, aCount); return result; } diff --git a/mozilla/xpcom/string/obsolete/nsStr.h b/mozilla/xpcom/string/obsolete/nsStr.h index 194d042bc6f..cd51847e8e8 100644 --- a/mozilla/xpcom/string/obsolete/nsStr.h +++ b/mozilla/xpcom/string/obsolete/nsStr.h @@ -443,14 +443,27 @@ struct NS_COM nsStr { * @param anOffset tells us where in the dest string to start searching * @return the index of the source (substr) in dest, or -1 (kNotFound) if not found. */ - static PRInt32 FindSubstr(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 FindChar(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 FindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); - - static PRInt32 RFindSubstr(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr1in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr1in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr2in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindSubstr2in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + + static PRInt32 FindChar1(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 FindChar2(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + + static PRInt32 FindCharInSet1(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + static PRInt32 FindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + + static PRInt32 RFindSubstr1in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr2in1(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr1in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindSubstr2in2(const nsStr& aDest,const nsStr& aSource, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); + static PRInt32 RFindChar1(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); static PRInt32 RFindChar2(const nsStr& aDest,PRUnichar aChar, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount); - static PRInt32 RFindCharInSet(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + + static PRInt32 RFindCharInSet1(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); + static PRInt32 RFindCharInSet2(const nsStr& aDest,const nsStr& aSet,PRBool aIgnoreCase,PRInt32 anOffset); static void Overwrite(nsStr& aDest,const nsStr& aSource,PRInt32 anOffset); diff --git a/mozilla/xpcom/string/obsolete/nsString.cpp b/mozilla/xpcom/string/obsolete/nsString.cpp index d3f860df819..ab80e91542a 100644 --- a/mozilla/xpcom/string/obsolete/nsString.cpp +++ b/mozilla/xpcom/string/obsolete/nsString.cpp @@ -85,29 +85,6 @@ nsCString::nsCString(const char* aCString,PRInt32 aLength) { Assign(aCString,aLength); } -#if 0 -/** - * This constructor accepts a unicode string - * @update gess 1/4/99 - * @param aString is a ptr to a unichar string - * @param aLength tells us how many chars to copy from given aString - */ -nsCString::nsCString(const PRUnichar* aString,PRInt32 aLength) { - Initialize(*this,eOneByte); - AssignWithConversion(aString,aLength); -} - -/** - * This constructor works for all other nsSTr derivatives - * @update gess 1/4/99 - * @param reference to another nsCString - */ -nsCString::nsCString(const nsStr &aString) { - Initialize(*this,eOneByte); - StrAssign(*this,aString,0,aString.mLength); -} -#endif - /** * This is our copy constructor * @update gess 1/4/99 @@ -246,34 +223,18 @@ PRBool nsCString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){ void nsCString::StripChar(PRUnichar aChar,PRInt32 anOffset){ if(mLength && (anOffsetGetUnicode(&unicode) != NS_OK || unicode == nsnull) return PR_FALSE; - cmp=Compare2To2((const char*)mUStr,(const char*)unicode, nsCRT::strlen(mUStr), aIgnoreCase); + cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr), aIgnoreCase); result=PRBool(0==cmp); } @@ -1695,29 +1675,6 @@ NS_ConvertUTF8toUCS2::Init( const nsACString& aCString ) NS_ASSERTION(count == mLength, "calculator calculated incorrect length"); } -#if 0 -/** - * Copy construct from ascii c-string - * @param aCString is a ptr to a 1-byte cstr - * @param aLength tells us how many chars to copy from aCString - */ -nsAutoString::nsAutoString(const char* aCString,PRInt32 aLength) : nsString() { - Initialize(*this,mBuffer,(sizeof(mBuffer)>>eTwoByte)-1,0,eTwoByte,PR_FALSE); - AddNullTerminator(*this); - Append(aCString,aLength); -} - -/** - * Copy construct from an nsStr - * @param - */ -nsAutoString::nsAutoString(const nsStr& aString) : nsString() { - Initialize(*this,mBuffer,(sizeof(mBuffer)>>eTwoByte)-1,0,eTwoByte,PR_FALSE); - AddNullTerminator(*this); - Append(aString); -} -#endif - /** * Default copy constructor */ diff --git a/mozilla/xpcom/string/obsolete/nsString2.h b/mozilla/xpcom/string/obsolete/nsString2.h index 612c59b95a3..e00a19f8148 100644 --- a/mozilla/xpcom/string/obsolete/nsString2.h +++ b/mozilla/xpcom/string/obsolete/nsString2.h @@ -325,7 +325,7 @@ public: * @return offset in string, or -1 (kNotFound) */ PRInt32 Find(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; - PRInt32 Find(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; + PRInt32 Find(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; @@ -351,7 +351,8 @@ public: */ PRInt32 FindCharInSet(const char* aString,PRInt32 anOffset=0) const; PRInt32 FindCharInSet(const PRUnichar* aString,PRInt32 anOffset=0) const; - PRInt32 FindCharInSet(const nsStr& aString,PRInt32 anOffset=0) const; + PRInt32 FindCharInSet(const nsString& aString,PRInt32 anOffset=0) const; + PRInt32 FindCharInSet(const nsCString& aString,PRInt32 anOffset=0) const; /** @@ -364,7 +365,7 @@ public: */ PRInt32 RFind(const char* aCString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; PRInt32 RFind(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; + PRInt32 RFind(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; PRInt32 RFind(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; @@ -389,7 +390,8 @@ public: */ PRInt32 RFindCharInSet(const char* aString,PRInt32 anOffset=-1) const; PRInt32 RFindCharInSet(const PRUnichar* aString,PRInt32 anOffset=-1) const; - PRInt32 RFindCharInSet(const nsStr& aString,PRInt32 anOffset=-1) const; + PRInt32 RFindCharInSet(const nsString& aString,PRInt32 anOffset=-1) const; + PRInt32 RFindCharInSet(const nsCString& aString,PRInt32 anOffset=-1) const; /**********************************************************************