making all string construction explicit; plus (now that the DOM APIs are turned on and you can no longer build without NEW_STRING_APIS) chopping out |#ifdef|ed code

This commit is contained in:
scc%mozilla.org 2000-09-02 20:53:31 +00:00
parent 57422a219a
commit 96b9a39082
15 changed files with 93 additions and 4965 deletions

View File

@ -17,22 +17,11 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
/*********************************************************************** /***********************************************************************
MODULE NOTES: MODULE NOTES:
@ -431,21 +420,6 @@ struct NS_COM nsStr {
*/ */
static PRUint32 HashCode(const nsStr& aDest); static PRUint32 HashCode(const nsStr& aDest);
#ifndef NEW_STRING_APIS
static void Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAppend(aDest, aSource, anOffset, aCount);
}
static void Assign(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAssign(aDest, aSource, anOffset, aCount);
}
static void Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUint32 aSrcOffset,PRInt32 aCount) {
StrInsert(aDest, aDestOffset, aSource, aSrcOffset, aCount);
}
static PRInt32 Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PRBool aIgnoreCase) {
return StrCompare(aDest, aSource, aCount, aIgnoreCase);
}
#endif
#ifdef NS_STR_STATS #ifdef NS_STR_STATS
/** /**
* Prints an nsStr. If truncate is true, the string is only printed up to * Prints an nsStr. If truncate is true, the string is only printed up to

View File

@ -70,12 +70,10 @@ nsCString::nsCString() {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
} }
#ifdef NEW_STRING_APIS
nsCString::nsCString(const char* aCString) { nsCString::nsCString(const char* aCString) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aCString); Assign(aCString);
} }
#endif
/** /**
* This constructor accepts an ascii string * This constructor accepts an ascii string
@ -137,7 +135,6 @@ nsCString::~nsCString() {
Destroy(*this); Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -172,7 +169,6 @@ nsCString::nsCString( const nsAReadableCString& aReadable ) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -232,35 +228,6 @@ const char* nsCString::GetBuffer(void) const {
return mStr; return mStr;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsCString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsCString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsCString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsCString::Last(void) const{
return (char)GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
@ -281,57 +248,6 @@ PRBool nsCString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
/********************************************************* /*********************************************************
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeCStr nsCString::operator+(const nsCString& aString){
nsCString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(const char* aCString) {
nsCString temp(*this);
temp.Append(aCString);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(PRUnichar aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr nsCString::operator+(char aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -843,73 +759,6 @@ PRInt32 nsCString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
String manipulation methods... String manipulation methods...
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: string to be appended
* @return this
*/
nsCString& nsCString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
/**
* assign given char* to this string
* @update gess 01/04/99
* @param aCString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Assign(const char* aCString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aCString){
Append(aCString,aCount);
}
return *this;
}
/**
* assign given char to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsCString& nsCString::Assign(char aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& nsCString::operator=(const nsSubsumeCStr& aSubsumeString) {
nsSubsumeCStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compiler
CSubsume(*this,temp);
#else
nsCString& nsCString::operator=(nsSubsumeCStr& aSubsumeString) {
CSubsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* assign given unichar* to this string * assign given unichar* to this string
@ -952,7 +801,6 @@ void nsCString::AssignWithConversion( const nsString& aString ) {
AssignWithConversion(aString.GetUnicode(), aString.Length()); AssignWithConversion(aString.GetUnicode(), aString.Length());
} }
#ifdef NEW_STRING_APIS
void nsCString::AssignWithConversion( const nsAReadableString& aString ) { void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -976,9 +824,7 @@ void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
#ifdef NEW_STRING_APIS
void nsCString::AppendWithConversion( const nsAReadableString& aString ) { void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -1001,7 +847,6 @@ void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
/** /**
* assign given unichar to this string * assign given unichar to this string
@ -1014,7 +859,6 @@ void nsCString::AssignWithConversion(PRUnichar aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable ) void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1022,87 +866,7 @@ void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
else else
nsAWritableCString::do_AppendFromReadable(aReadable); nsAWritableCString::do_AppendFromReadable(aReadable);
} }
#endif
#ifndef NEW_STRING_APIS
/**
* append given string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsCString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#if 0
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given c-string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount: #of chars to be copied; -1 means to copy the whole thing
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Append(const char* aCString,PRInt32 aCount) {
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsCString& nsCString::Append(char aChar) {
char buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/** /**
* append given char to this string * append given char to this string
@ -1272,7 +1036,6 @@ void nsCString::InsertWithConversion(PRUnichar aChar,PRUint32 anOffset){
StrInsert(*this,anOffset,temp,0,1); StrInsert(*this,anOffset,temp,0,1);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition ) void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1280,99 +1043,10 @@ void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUi
else else
nsAWritableCString::do_InsertFromReadable(aReadable, atPosition); nsAWritableCString::do_InsertFromReadable(aReadable, atPosition);
} }
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsCString::Insert(const nsCString& aString,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aString,0,aCount);
}
/**
* Insert a char* into this string at a specified offset.
*
* @update gess4/22/98
* @param char* aCString to be inserted into this string
* @param anOffset is insert pos in str
* @param aCounttells us how many chars to insert
* @return this
*/
void nsCString::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCount){
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(temp.mLength && (0<aCount)){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsCString::Insert(char aChar,PRUint32 anOffset){
char theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsCString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1676,55 +1350,6 @@ PRInt32 nsCString::CompareWithConversion(const char *aCString,PRBool aIgnoreCase
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsCString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsCString::operator==(const nsStr& S) const {return Equals(S);}
PRBool nsCString::operator==(const char* s) const {return Equals(s);}
//PRBool nsCString::operator==(const PRUnichar* s) const {return Equals(s);}
PRBool nsCString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
PRBool nsCString::operator!=(const char* s) const {return PRBool(Compare(nsCAutoString(s))!=0);}
//PRBool nsCString::operator!=(const PRUnichar* s) const {return PRBool(Compare(s)!=0);}
PRBool nsCString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
PRBool nsCString::operator<(const char* s) const {return PRBool(Compare(nsCAutoString(s))<0);}
//PRBool nsCString::operator<(const PRUnichar* s) const {return PRBool(Compare(s)<0);}
PRBool nsCString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
PRBool nsCString::operator>(const char* s) const {return PRBool(Compare(nsCAutoString(s))>0);}
//PRBool nsCString::operator>(const PRUnichar* s) const {return PRBool(Compare(s)>0);}
PRBool nsCString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
PRBool nsCString::operator<=(const char* s) const {return PRBool(Compare(nsCAutoString(s))<=0);}
//PRBool nsCString::operator<=(const PRUnichar* s) const {return PRBool(Compare(s)<=0);}
PRBool nsCString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
PRBool nsCString::operator>=(const char* s) const {return PRBool(Compare(nsCAutoString(s))>=0);}
//PRBool nsCString::operator>=(const PRUnichar* s) const {return PRBool(Compare(s)>=0);}
#endif
#ifndef NEW_STRING_APIS
PRBool nsCString::EqualsIgnoreCase(const nsStr& aString) const {
return Equals(aString,PR_TRUE);
}
#endif
PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const { PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
@ -1734,22 +1359,6 @@ PRBool nsCString::EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aLength) con
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsCString to be compared to
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsCString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
@ -1935,7 +1544,6 @@ void nsCString::DebugDump(void) const {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#ifdef NEW_STRING_APIS
NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString ) NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
{ {
nsReadingIterator<PRUnichar> start(aString.BeginReading()); nsReadingIterator<PRUnichar> start(aString.BeginReading());
@ -1947,7 +1555,6 @@ NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
start += start.size_forward(); start += start.size_forward();
} }
} }
#endif
void void
NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength ) NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength )

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -38,15 +36,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsCString_ #ifndef _nsCString_
#define _nsCString_ #define _nsCString_
@ -57,45 +46,19 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsIAtom.h" #include "nsIAtom.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#else
#define NS_LITERAL_STRING(s) (s)
#define NS_LITERAL_CSTRING(s) (s)
#define NS_DEF_DERIVED_STRING_OPERATOR_PLUS(_StringT, _CharT)
#define NS_DEF_2_STRING_STRING_OPERATOR_PLUS(_String1T, _String2T, _CharT)
inline
char
nsLiteralChar( char c )
{
return c;
}
inline
PRUnichar
nsLiteralPRUnichar( PRUnichar c )
{
return c;
}
#endif
class NS_COM nsSubsumeCStr; class NS_COM nsSubsumeCStr;
class NS_COM nsCString : class NS_COM nsCString :
#ifdef NEW_STRING_APIS
public nsAWritableCString, public nsAWritableCString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsCString"; } virtual const void* Implementation() const { return "nsCString"; }
virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const; virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 ); virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
/** /**
@ -109,36 +72,16 @@ public:
*/ */
nsCString(const nsCString& aString); nsCString(const nsCString& aString);
#ifdef NEW_STRING_APIS
explicit nsCString( const nsAReadableCString& ); explicit nsCString( const nsAReadableCString& );
nsCString(const char*); explicit nsCString(const char*);
nsCString(const char*, PRInt32); nsCString(const char*, PRInt32);
#else
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
nsCString(const char* aCString,PRInt32 aLength=-1);
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
//nsCString(const PRUnichar* aString,PRInt32 aLength=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsCString
*/
//nsCString(const nsStr&);
#endif
/** /**
* This constructor takes a subsumestr * This constructor takes a subsumestr
* @param reference to subsumestr * @param reference to subsumestr
*/ */
nsCString(nsSubsumeCStr& aSubsumeStr); explicit nsCString(nsSubsumeCStr& aSubsumeStr);
/** /**
* Destructor * Destructor
@ -186,17 +129,6 @@ public:
SetLength(anIndex); SetLength(anIndex);
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Accessor methods... Accessor methods...
*********************************************************************/ *********************************************************************/
@ -207,49 +139,8 @@ public:
*/ */
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
/**********************************************************************
String creation methods...
*********************************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new string
*/
nsSubsumeCStr operator+(const nsCString& aString);
/**
* create a new string by adding this to the given char*.
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(const char* aCString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(PRUnichar aChar);
nsSubsumeCStr operator+(char aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
*********************************************************************/ *********************************************************************/
@ -419,50 +310,16 @@ public:
*/ */
nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; } nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCString& operator=( char aChar ) { Assign(aChar); return *this; } nsCString& operator=( char aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(const PRUnichar*,PRInt32=-1); void AssignWithConversion(const PRUnichar*,PRInt32=-1);
void AssignWithConversion( const nsString& aString ); void AssignWithConversion( const nsString& aString );
#ifdef NEW_STRING_APIS
void AssignWithConversion( const nsAReadableString& aString ); void AssignWithConversion( const nsAReadableString& aString );
#endif
void AssignWithConversion(PRUnichar); void AssignWithConversion(PRUnichar);
#ifndef NEW_STRING_APIS
nsCString& Assign(const char* aString,PRInt32 aCount=-1);
nsCString& Assign(char aChar);
nsCString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsCString& Assign(const PRUnichar* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsCString& Assign(PRUnichar aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
//nsCString& operator=(PRUnichar aChar) {AssignWithConversion(aChar); return *this;}
nsCString& operator=(char aChar) {return Assign(aChar);}
//nsCString& operator=(const PRUnichar* aString) {AssignWithConversion(aString); return *this;}
//nsCString& operator=(const nsStr& aString) {return Assign(aString);}
nsCString& operator=(const char* aCString) {return Assign(aCString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& operator=(const nsSubsumeCStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsCString& operator=(nsSubsumeCStr& aSubsumeString);
#endif
#endif
/* /*
* Appends n characters from given string to this, * Appends n characters from given string to this,
* *
@ -475,42 +332,13 @@ public:
void AppendWithConversion(const nsString&, PRInt32=-1); void AppendWithConversion(const nsString&, PRInt32=-1);
void AppendWithConversion(PRUnichar aChar); void AppendWithConversion(PRUnichar aChar);
#ifdef NEW_STRING_APIS
void AppendWithConversion( const nsAReadableString& aString ); void AppendWithConversion( const nsAReadableString& aString );
#endif
void AppendWithConversion(const PRUnichar*, PRInt32=-1); void AppendWithConversion(const PRUnichar*, PRInt32=-1);
// Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine // Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine
void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16 void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16
void AppendFloat( double aFloat ); void AppendFloat( double aFloat );
#ifdef NEW_STRING_APIS
virtual void do_AppendFromReadable( const nsAReadableCString& ); virtual void do_AppendFromReadable( const nsAReadableCString& );
#endif
#ifndef NEW_STRING_APIS
//nsCString& Append(const nsStr& aString,PRInt32 aCount=-1);
nsCString& Append(const nsCString& aString,PRInt32 aCount);
nsCString& Append(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& Append(const char* aString,PRInt32 aCount=-1);
nsCString& Append(char aChar);
//nsCString& Append(PRUnichar aChar) {AppendWithConversion(aChar); return *this;}
//nsCString& Append(PRInt32 aInteger,PRInt32 aRadix=10) {AppendInt(aInteger,aRadix); return *this;}
//nsCString& Append(float aFloat) {AppendFloat(aFloat); return *this;}
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
nsCString& operator+=(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& operator+=(const char* aCString) {return Append(aCString);}
//nsCString& operator+=(const PRUnichar aChar) {return Append(aChar);}
nsCString& operator+=(const char aChar) {return Append(aChar);}
//nsCString& operator+=(const int anInt) {return Append(anInt,10);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
* starting at the leftmost offset. * starting at the leftmost offset.
@ -548,57 +376,7 @@ public:
void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset); void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset);
// Why no |InsertWithConversion(PRUnichar*)|? // Why no |InsertWithConversion(PRUnichar*)|?
#ifdef NEW_STRING_APIS
virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 ); virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 );
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsCString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
void Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//void Insert(PRUnichar aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset);}
void Insert(char aChar,PRUint32 anOffset);
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -699,96 +477,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars in given string you want to compare
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const nsStr& aString) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsStr &aString) const;
PRBool operator==(const char* aString) const;
//PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsStr &aString) const;
PRBool operator!=(const char* aString) const;
//PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsStr &aString) const;
PRBool operator<(const char* aString) const;
//PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsStr &S) const;
PRBool operator>(const char* aString) const;
//PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsStr &S) const;
PRBool operator<=(const char* aString) const;
//PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsStr &S) const;
PRBool operator>=(const char* aString) const;
//PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
void DebugDump(void) const; void DebugDump(void) const;
@ -799,28 +487,14 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( PRUnichar ); void operator=( PRUnichar );
#endif
void AssignWithConversion( char ); void AssignWithConversion( char );
void AssignWithConversion( const char*, PRInt32=-1 ); void AssignWithConversion( const char*, PRInt32=-1 );
void AppendWithConversion( char ); void AppendWithConversion( char );
void InsertWithConversion( char, PRUint32 ); void InsertWithConversion( char, PRUint32 );
}; };
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<char>
operator+( const nsPromiseConcatenation<char>& lhs, const nsCString& rhs )
{
return nsPromiseConcatenation<char>(lhs, rhs);
}
#endif
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char) NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCString, char);
#endif
extern NS_COM int fputs(const nsCString& aString, FILE* out); extern NS_COM int fputs(const nsCString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsCString& aString); //ostream& operator<<(ostream& aStream,const nsCString& aString);
@ -839,27 +513,20 @@ public:
virtual ~nsCAutoString(); virtual ~nsCAutoString();
nsCAutoString(); nsCAutoString();
nsCAutoString(const nsCString& ); explicit nsCAutoString(const nsCString& );
nsCAutoString(const nsAReadableCString& aString); explicit nsCAutoString(const nsAReadableCString& aString);
nsCAutoString(const char* aString); explicit nsCAutoString(const char* aString);
nsCAutoString(const char* aString,PRInt32 aLength); nsCAutoString(const char* aString,PRInt32 aLength);
nsCAutoString(const CBufDescriptor& aBuffer); explicit nsCAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsCAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
// nsCAutoString(const nsStr& aString);
// nsCAutoString(PRUnichar aChar);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const explicit nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const
#else #else
nsCAutoString(nsSubsumeCStr& aSubsumeStr); explicit nsCAutoString(nsSubsumeCStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; } nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
public: public:
@ -867,13 +534,6 @@ public:
nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; } nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; }
#else
nsCAutoString& operator=(const nsCString& aString) {nsCString::Assign(aString); return *this;}
nsCAutoString& operator=(const char* aCString) {nsCString::Assign(aCString); return *this;}
// nsCAutoString& operator=(const PRUnichar* aString) {nsCString::Assign(aString); return *this;}
// nsCAutoString& operator=(PRUnichar aChar) {nsCString::Assign(aChar); return *this;}
nsCAutoString& operator=(char aChar) {nsCString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -884,14 +544,6 @@ public:
char mBuffer[kDefaultStringSize]; char mBuffer[kDefaultStringSize];
}; };
#if 0//def NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCAutoString, char)
#endif
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCAutoString, char)
#endif
/** /**
* A helper class that converts a UCS2 string to UTF8 * A helper class that converts a UCS2 string to UTF8
*/ */
@ -902,6 +554,7 @@ class NS_COM NS_ConvertUCS2toUTF8
*/ */
{ {
public: public:
explicit
NS_ConvertUCS2toUTF8( const PRUnichar* aString ) NS_ConvertUCS2toUTF8( const PRUnichar* aString )
{ {
Append( aString, ~PRUint32(0) /* MAXINT */); Append( aString, ~PRUint32(0) /* MAXINT */);
@ -912,14 +565,13 @@ class NS_COM NS_ConvertUCS2toUTF8
Append( aString, aLength ); Append( aString, aLength );
} }
explicit
NS_ConvertUCS2toUTF8( PRUnichar aChar ) NS_ConvertUCS2toUTF8( PRUnichar aChar )
{ {
Append( &aChar, 1 ); Append( &aChar, 1 );
} }
#ifdef NEW_STRING_APIS explicit NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
#endif
operator const char*() const operator const char*() const
{ {
@ -950,19 +602,17 @@ class NS_COM NS_ConvertUCS2toUTF8
***************************************************************/ ***************************************************************/
class NS_COM nsSubsumeCStr : public nsCString { class NS_COM nsSubsumeCStr : public nsCString {
public: public:
nsSubsumeCStr(nsStr& aString); explicit nsSubsumeCStr(nsStr& aString);
nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; } nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; } nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
#endif
}; };

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -69,25 +67,10 @@ nsString::nsString() {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
} }
#if 0
/**
* This constructor accepts an ascii string
* @update gess 1/4/99
* @param aCString is a ptr to a 1-byte cstr
* @param aLength tells us how many chars to copy from given CString
*/
nsString::nsString(const char* aCString,PRInt32 aCount){
Initialize(*this,eTwoByte);
AssignWithConversion(aCString,aCount);
}
#endif
#ifdef NEW_STRING_APIS
nsString::nsString(const PRUnichar* aString) { nsString::nsString(const PRUnichar* aString) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aString); Assign(aString);
} }
#endif
/** /**
* This constructor accepts a unicode string * This constructor accepts a unicode string
@ -100,18 +83,6 @@ nsString::nsString(const PRUnichar* aString,PRInt32 aCount) {
Assign(aString,aCount); Assign(aString,aCount);
} }
#if 0
/**
* This constructor works for all other nsSTr derivatives
* @update gess 1/4/99
* @param reference to another nsCString
*/
nsString::nsString(const nsStr &aString) {
Initialize(*this,eTwoByte);
StrAssign(*this,aString,0,aString.mLength);
}
#endif
/** /**
* This is our copy constructor * This is our copy constructor
* @update gess 1/4/99 * @update gess 1/4/99
@ -149,7 +120,6 @@ nsString::~nsString() {
nsStr::Destroy(*this); nsStr::Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -199,7 +169,6 @@ nsString::nsString( const nsAReadableString& aReadable ) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -275,36 +244,6 @@ const PRUnichar* nsString::GetUnicode(void) const {
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsString::Last(void) const{
return GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
* @param aChar is the char you want to write into this string * @param aChar is the char you want to write into this string
@ -330,81 +269,6 @@ PRBool nsString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsStr& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsString& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const char* aCString) {
nsString temp(*this);
temp.AppendWithConversion(aCString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(char aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aString is a ptr to unistring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const PRUnichar* aString) {
nsString temp(*this);
temp.Append(aString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a unichar to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(PRUnichar aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -952,26 +816,6 @@ PRInt32 nsString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: nsStr to be appended
* @return this
*/
nsString& nsString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
#endif
/** /**
* assign given char* to this string * assign given char* to this string
@ -989,33 +833,13 @@ void nsString::AssignWithConversion(const char* aCString,PRInt32 aCount) {
} }
} }
#ifdef NEW_STRING_APIS
void nsString::AssignWithConversion(const char* aCString) { void nsString::AssignWithConversion(const char* aCString) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
if(aCString){ if(aCString){
AppendWithConversion(aCString); AppendWithConversion(aCString);
} }
} }
#endif
#ifndef NEW_STRING_APIS
/**
* assign given unichar* to this string
* @update gess 01/04/99
* @param aString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Assign(const PRUnichar* aString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aString){
Append(aString,aCount);
}
return *this;
}
#endif
/** /**
* assign given char to this string * assign given char to this string
@ -1028,39 +852,6 @@ void nsString::AssignWithConversion(char aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifndef NEW_STRING_APIS
/**
* assign given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsString& nsString::Assign(PRUnichar aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
#endif
#ifndef NEW_STRING_APIS
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& nsString::operator=(const nsSubsumeStr& aSubsumeString) {
nsSubsumeStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compilers
Subsume(*this,temp);
#else
nsString& nsString::operator=(nsSubsumeStr& aSubsumeString) {
Subsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* append given c-string to this string * append given c-string to this string
@ -1169,96 +960,6 @@ void nsString::AppendFloat(double aFloat){
} }
#ifndef NEW_STRING_APIS
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
#if 0
nsString& nsString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given string to this string
* I don't think we need this method now that we have the previous one.
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsString& nsString::Append(const nsString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
/**
* append given unicode string to this
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Append(const PRUnichar* aString,PRInt32 aCount) {
if(aString && aCount){ //if astring is null or count==0 there's nothing to do
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsString& nsString::Append(PRUnichar aChar) {
PRUnichar buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/* /*
* Copies n characters from this left of this string to given string, * Copies n characters from this left of this string to given string,
@ -1349,98 +1050,8 @@ void nsString::InsertWithConversion(const char* aCString,PRUint32 anOffset,PRInt
} }
} }
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsString::Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aCopy,0,aCount);
}
/**
* Insert a unicode* into this string at a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
void nsString::Insert(const PRUnichar* aString,PRUint32 anOffset,PRInt32 aCount){
if(aString && aCount){
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsString::Insert(PRUnichar aChar,PRUint32 anOffset){
PRUnichar theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1823,55 +1434,7 @@ PRInt32 nsString::CompareWithConversion(const PRUnichar* aString,PRBool aIgnoreC
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsString::operator==(const nsString& S) const {return Equals(S);}
//PRBool nsString::operator==(const nsStr& S) const {return Equals(S);}
//PRBool nsString::operator==(const char* s) const {return Equals(s);}
PRBool nsString::operator==(const PRUnichar* s) const {return Equals(nsAutoString(s));}
PRBool nsString::operator!=(const nsString& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const char* s) const {return PRBool(Compare(s)!=0);}
PRBool nsString::operator!=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))!=0);}
PRBool nsString::operator<(const nsString& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const char* s) const {return PRBool(Compare(s)<0);}
PRBool nsString::operator<(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<0);}
PRBool nsString::operator>(const nsString& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const char* s) const {return PRBool(Compare(s)>0);}
PRBool nsString::operator>(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>0);}
PRBool nsString::operator<=(const nsString& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const char* s) const {return PRBool(Compare(s)<=0);}
PRBool nsString::operator<=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<=0);}
PRBool nsString::operator>=(const nsString& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const char* s) const {return PRBool(Compare(s)>=0);}
PRBool nsString::operator>=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>=0);}
#endif // !defined(NEW_STRING_APIS)
PRBool nsString::EqualsIgnoreCase(const nsString& aString) const { PRBool nsString::EqualsIgnoreCase(const nsString& aString) const {
return EqualsWithConversion(aString,PR_TRUE); return EqualsWithConversion(aString,PR_TRUE);
@ -1881,12 +1444,6 @@ PRBool nsString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
#ifndef NEW_STRING_APIS
PRBool nsString::EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const {
return Equals(s1,s2,PR_TRUE);
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
* *
@ -1963,40 +1520,6 @@ PRBool nsString::EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const {
return EqualsAtom(aAtom,PR_TRUE); return EqualsAtom(aAtom,PR_TRUE);
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsString to be compared to
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
/**
* Compare given strings
* @update gess 7/27/98
* @param s1 -- first unichar string to be compared
* @param s2 -- second unichar string to be compared
* @return TRUE if equal
*/
PRBool nsString::Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase) const {
NS_ASSERTION(0!=s1,kNullPointerError);
NS_ASSERTION(0!=s2,kNullPointerError);
PRBool result=PR_FALSE;
if((s1) && (s2)){
PRInt32 cmp=(aIgnoreCase) ? nsCRT::strcasecmp(s1,s2) : nsCRT::strcmp(s1,s2);
result=PRBool(0==cmp);
}
return result;
}
#endif
/** /**
* Determine if given char in valid alpha range * Determine if given char in valid alpha range
@ -2321,21 +1844,6 @@ NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( char aChar )
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsAReadableCString& )
{
// ...
}
#else
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsCString& )
{
// ...
}
#endif
#endif
void void
NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength ) NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength )
{ {

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -39,16 +37,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsString_ #ifndef _nsString_
#define _nsString_ #define _nsString_
@ -60,9 +48,7 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsCRT.h" #include "nsCRT.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#endif
#ifdef STANDALONE_MI_STRING_TESTS #ifdef STANDALONE_MI_STRING_TESTS
class nsAReadableString { public: virtual ~nsAReadableString() { } }; class nsAReadableString { public: virtual ~nsAReadableString() { } };
@ -78,17 +64,13 @@ class nsISizeOfHandler;
class NS_COM nsSubsumeStr; class NS_COM nsSubsumeStr;
class NS_COM nsString : class NS_COM nsString :
#if defined(NEW_STRING_APIS) || defined(STANDALONE_MI_STRING_TESTS)
public nsAWritableString, public nsAWritableString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsString"; } virtual const void* Implementation() const { return "nsString"; }
virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const; virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ); virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
@ -103,30 +85,10 @@ public:
*/ */
nsString(const nsString& aString); nsString(const nsString& aString);
#ifdef NEW_STRING_APIS
explicit nsString(const nsAReadableString&); explicit nsString(const nsAReadableString&);
nsString(const PRUnichar*); explicit nsString(const PRUnichar*);
nsString(const PRUnichar*, PRInt32); nsString(const PRUnichar*, PRInt32);
#else
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
nsString(const PRUnichar* aString,PRInt32 aCount=-1);
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
//nsString(const char* aCString,PRInt32 aCount=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsString
*/
//nsString(const nsStr&);
#endif
/** /**
@ -134,9 +96,9 @@ public:
* @param reference to subsumestr * @param reference to subsumestr
*/ */
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here explicit nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here
#else #else
nsString(nsSubsumeStr& aSubsumeStr); explicit nsString(nsSubsumeStr& aSubsumeStr);
#endif #endif
/** /**
@ -198,17 +160,6 @@ public:
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Getters/Setters... Getters/Setters...
*********************************************************************/ *********************************************************************/
@ -219,63 +170,12 @@ public:
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
const PRUnichar* GetUnicode(void) const; const PRUnichar* GetUnicode(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Set nth character. * Set nth character.
*/ */
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
#ifndef NEW_STRING_APIS
/**********************************************************************
String concatenation methods...
*********************************************************************/
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new subsumable string
*/
nsSubsumeStr operator+(const nsStr& aString);
nsSubsumeStr operator+(const nsString& aString);
/**
* create a new string by adding this to the given cstring
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const char* aCString);
/**
* create a new string by adding this to the given prunichar*.
* @param aString is a ptr to UC-string to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const PRUnichar* aString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(char aChar);
/**
* create a new string by adding this to the given char.
* @param aChar is a unichar to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(PRUnichar aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -449,47 +349,14 @@ public:
*/ */
nsString& operator=( const nsString& aString ) { Assign(aString); return *this; } nsString& operator=( const nsString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(char); void AssignWithConversion(char);
#ifdef NEW_STRING_APIS
void AssignWithConversion(const char*); void AssignWithConversion(const char*);
void AssignWithConversion(const char*, PRInt32); void AssignWithConversion(const char*, PRInt32);
#else
void AssignWithConversion(const char*, PRInt32=-1);
nsString& Assign(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Assign(PRUnichar aChar);
nsString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsString& Assign(const char* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsString& Assign(char aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
nsString& operator=(PRUnichar aChar) {Assign(aChar); return *this;}
//nsString& operator=(char aChar) {AssignWithConversion(aChar); return *this;}
//nsString& operator=(const char* aCString) {AssignWithConversion(aCString); return *this;}
//nsString& operator=(const nsStr& aString) {return Assign(aString);}
nsString& operator=(const PRUnichar* aString) {return Assign(aString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& operator=(const nsSubsumeStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsString& operator=(nsSubsumeStr& aSubsumeString);
#endif
#endif
/* /*
@ -507,42 +374,6 @@ public:
virtual void do_AppendFromElement( PRUnichar ); virtual void do_AppendFromElement( PRUnichar );
#ifndef NEW_STRING_APIS
/*
* Appends n characters from given string to this,
*
* @param aString is the source to be appended to this
* @param aCount -- number of chars to copy; -1 tells us to compute the strlen for you
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
* @return number of chars copied
*/
//nsString& Append(const nsStr& aString,PRInt32 aCount);
//nsString& Append(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const nsString& aString,PRInt32 aCount);
nsString& Append(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Append(PRUnichar aChar);
//nsString& Append(const char* aString,PRInt32 aCount=-1) { AppendWithConversion(aString,aCount); return *this; }
//nsString& Append(char aChar) { AppendWithConversion(aChar); return *this; }
//nsString& Append(PRInt32 aInteger,PRInt32 aRadix=10) { AppendInt(aInteger,aRadix); return *this; }
//nsString& Append(float aFloat) { AppendFloat(aFloat); return *this; }
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
//nsString& operator+=(const char* aCString) {return Append(aCString);}
//nsString& operator+=(const char aChar) {return Append((PRUnichar) (unsigned char)aChar);}
nsString& operator+=(const PRUnichar aChar) {return Append(aChar);}
//nsString& operator+=(const int anInt) {return Append(anInt,10);}
//nsString& operator+=(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const PRUnichar* aUCString) {return Append(aUCString);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
@ -581,55 +412,6 @@ public:
//void InsertWithConversion(char); //void InsertWithConversion(char);
void InsertWithConversion(const char*, PRUint32, PRInt32=-1); void InsertWithConversion(const char*, PRUint32, PRInt32=-1);
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1) {InsertWithConversion(aChar, anOffset, aCount); return *this;}
void Insert(const PRUnichar* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(char aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset); return *this;}
void Insert(PRUnichar aChar,PRUint32 anOffset);
#endif
#ifndef NEW_STRING_APIS
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -739,110 +521,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const; PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars to be compared.
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(/*FIX: const */nsIAtom* anAtom,PRBool aIgnoreCase) const { return EqualsAtom(anAtom, aIgnoreCase); }
PRBool Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase=PR_FALSE) const;
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsString &aString) const;
//PRBool operator==(const nsStr &aString) const;
//PRBool operator==(const char *aString) const;
PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsString &aString) const;
//PRBool operator!=(const nsStr &aString) const;
//PRBool operator!=(const char* aString) const;
PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsString &aString) const;
//PRBool operator<(const nsStr &aString) const;
//PRBool operator<(const char* aString) const;
PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsString &aString) const;
//PRBool operator>(const nsStr &S) const;
//PRBool operator>(const char* aString) const;
PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsString &aString) const;
//PRBool operator<=(const nsStr &S) const;
//PRBool operator<=(const char* aString) const;
PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsString &aString) const;
//PRBool operator>=(const nsStr &S) const;
//PRBool operator>=(const char* aString) const;
PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Determine if given buffer is plain ascii * Determine if given buffer is plain ascii
@ -884,9 +562,7 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( char ); void operator=( char );
#endif
void AssignWithConversion( PRUnichar ); void AssignWithConversion( PRUnichar );
void AssignWithConversion( const PRUnichar*, PRInt32=-1 ); void AssignWithConversion( const PRUnichar*, PRInt32=-1 );
void AppendWithConversion( PRUnichar ); void AppendWithConversion( PRUnichar );
@ -894,19 +570,7 @@ private:
void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 ); void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 );
}; };
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar) NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsString, PRUnichar)
#endif
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<PRUnichar>
operator+( const nsPromiseConcatenation<PRUnichar>& lhs, const nsString& rhs )
{
return nsPromiseConcatenation<PRUnichar>(lhs, rhs);
}
#endif
extern NS_COM int fputs(const nsString& aString, FILE* out); extern NS_COM int fputs(const nsString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsString& aString); //ostream& operator<<(ostream& aStream,const nsString& aString);
@ -924,27 +588,21 @@ public:
virtual ~nsAutoString(); virtual ~nsAutoString();
nsAutoString(); nsAutoString();
nsAutoString(const nsAutoString& aString); nsAutoString(const nsAutoString& aString);
nsAutoString(const nsAReadableString& aString); explicit nsAutoString(const nsAReadableString& aString);
nsAutoString(const nsString& aString); explicit nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString); explicit nsAutoString(const PRUnichar* aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength); nsAutoString(const PRUnichar* aString,PRInt32 aLength);
nsAutoString(PRUnichar aChar); explicit nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer); explicit nsAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsAutoString(const char* aCString,PRInt32 aLength=-1);
// nsAutoString(const nsStr& aString);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const explicit nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const
#else #else
nsAutoString(nsSubsumeStr& aSubsumeStr); explicit nsAutoString(nsSubsumeStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; } nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
public: public:
@ -952,13 +610,6 @@ public:
nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#else
nsAutoString& operator=(const nsStr& aString) {nsString::Assign(aString); return *this;}
// nsAutoString& operator=(const char* aCString) {nsString::Assign(aCString); return *this;}
// nsAutoString& operator=(char aChar) {nsString::Assign(aChar); return *this;}
nsAutoString& operator=(const PRUnichar* aBuffer) {nsString::Assign(aBuffer); return *this;}
nsAutoString& operator=(PRUnichar aChar) {nsString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -969,10 +620,6 @@ public:
char mBuffer[kDefaultStringSize<<eTwoByte]; char mBuffer[kDefaultStringSize<<eTwoByte];
}; };
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsAutoString, PRUnichar)
#endif
class NS_COM NS_ConvertASCIItoUCS2 class NS_COM NS_ConvertASCIItoUCS2
: public nsAutoString : public nsAutoString
/* /*
@ -980,19 +627,10 @@ class NS_COM NS_ConvertASCIItoUCS2
*/ */
{ {
public: public:
NS_ConvertASCIItoUCS2( const char* ); explicit NS_ConvertASCIItoUCS2( const char* );
NS_ConvertASCIItoUCS2( const char*, PRUint32 ); NS_ConvertASCIItoUCS2( const char*, PRUint32 );
NS_ConvertASCIItoUCS2( char ); explicit NS_ConvertASCIItoUCS2( char );
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2( const nsAReadableCString& );
#else
class nsCString;
NS_ConvertASCIItoUCS2( const nsCString& );
#endif
#endif
#ifdef NEW_STRING_APIS
operator const PRUnichar*() const operator const PRUnichar*() const
{ {
return GetUnicode(); return GetUnicode();
@ -1002,7 +640,6 @@ class NS_COM NS_ConvertASCIItoUCS2
{ {
return nsLiteralString(mUStr, mLength); return nsLiteralString(mUStr, mLength);
} }
#endif
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
@ -1036,6 +673,7 @@ class NS_COM NS_ConvertUTF8toUCS2
: public nsAutoString : public nsAutoString
{ {
public: public:
explicit
NS_ConvertUTF8toUCS2( const char* aCString ) NS_ConvertUTF8toUCS2( const char* aCString )
{ {
Init( aCString, ~PRUint32(0) /* MAXINT */ ); Init( aCString, ~PRUint32(0) /* MAXINT */ );
@ -1046,6 +684,7 @@ class NS_COM NS_ConvertUTF8toUCS2
Init( aCString, aLength ); Init( aCString, aLength );
} }
explicit
NS_ConvertUTF8toUCS2( char aChar ) NS_ConvertUTF8toUCS2( char aChar )
{ {
Init( &aChar, 1 ); Init( &aChar, 1 );
@ -1079,20 +718,18 @@ class NS_COM NS_ConvertUTF8toUCS2
class NS_COM nsSubsumeStr : public nsString { class NS_COM nsSubsumeStr : public nsString {
public: public:
nsSubsumeStr(); nsSubsumeStr();
nsSubsumeStr(nsStr& aString); explicit nsSubsumeStr(nsStr& aString);
nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
#endif
}; };

View File

@ -17,22 +17,11 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
/*********************************************************************** /***********************************************************************
MODULE NOTES: MODULE NOTES:
@ -431,21 +420,6 @@ struct NS_COM nsStr {
*/ */
static PRUint32 HashCode(const nsStr& aDest); static PRUint32 HashCode(const nsStr& aDest);
#ifndef NEW_STRING_APIS
static void Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAppend(aDest, aSource, anOffset, aCount);
}
static void Assign(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAssign(aDest, aSource, anOffset, aCount);
}
static void Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUint32 aSrcOffset,PRInt32 aCount) {
StrInsert(aDest, aDestOffset, aSource, aSrcOffset, aCount);
}
static PRInt32 Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PRBool aIgnoreCase) {
return StrCompare(aDest, aSource, aCount, aIgnoreCase);
}
#endif
#ifdef NS_STR_STATS #ifdef NS_STR_STATS
/** /**
* Prints an nsStr. If truncate is true, the string is only printed up to * Prints an nsStr. If truncate is true, the string is only printed up to

View File

@ -70,12 +70,10 @@ nsCString::nsCString() {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
} }
#ifdef NEW_STRING_APIS
nsCString::nsCString(const char* aCString) { nsCString::nsCString(const char* aCString) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aCString); Assign(aCString);
} }
#endif
/** /**
* This constructor accepts an ascii string * This constructor accepts an ascii string
@ -137,7 +135,6 @@ nsCString::~nsCString() {
Destroy(*this); Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -172,7 +169,6 @@ nsCString::nsCString( const nsAReadableCString& aReadable ) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -232,35 +228,6 @@ const char* nsCString::GetBuffer(void) const {
return mStr; return mStr;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsCString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsCString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsCString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsCString::Last(void) const{
return (char)GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
@ -281,57 +248,6 @@ PRBool nsCString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
/********************************************************* /*********************************************************
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeCStr nsCString::operator+(const nsCString& aString){
nsCString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(const char* aCString) {
nsCString temp(*this);
temp.Append(aCString);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(PRUnichar aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr nsCString::operator+(char aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -843,73 +759,6 @@ PRInt32 nsCString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
String manipulation methods... String manipulation methods...
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: string to be appended
* @return this
*/
nsCString& nsCString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
/**
* assign given char* to this string
* @update gess 01/04/99
* @param aCString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Assign(const char* aCString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aCString){
Append(aCString,aCount);
}
return *this;
}
/**
* assign given char to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsCString& nsCString::Assign(char aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& nsCString::operator=(const nsSubsumeCStr& aSubsumeString) {
nsSubsumeCStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compiler
CSubsume(*this,temp);
#else
nsCString& nsCString::operator=(nsSubsumeCStr& aSubsumeString) {
CSubsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* assign given unichar* to this string * assign given unichar* to this string
@ -952,7 +801,6 @@ void nsCString::AssignWithConversion( const nsString& aString ) {
AssignWithConversion(aString.GetUnicode(), aString.Length()); AssignWithConversion(aString.GetUnicode(), aString.Length());
} }
#ifdef NEW_STRING_APIS
void nsCString::AssignWithConversion( const nsAReadableString& aString ) { void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -976,9 +824,7 @@ void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
#ifdef NEW_STRING_APIS
void nsCString::AppendWithConversion( const nsAReadableString& aString ) { void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -1001,7 +847,6 @@ void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
/** /**
* assign given unichar to this string * assign given unichar to this string
@ -1014,7 +859,6 @@ void nsCString::AssignWithConversion(PRUnichar aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable ) void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1022,87 +866,7 @@ void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
else else
nsAWritableCString::do_AppendFromReadable(aReadable); nsAWritableCString::do_AppendFromReadable(aReadable);
} }
#endif
#ifndef NEW_STRING_APIS
/**
* append given string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsCString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#if 0
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given c-string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount: #of chars to be copied; -1 means to copy the whole thing
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Append(const char* aCString,PRInt32 aCount) {
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsCString& nsCString::Append(char aChar) {
char buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/** /**
* append given char to this string * append given char to this string
@ -1272,7 +1036,6 @@ void nsCString::InsertWithConversion(PRUnichar aChar,PRUint32 anOffset){
StrInsert(*this,anOffset,temp,0,1); StrInsert(*this,anOffset,temp,0,1);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition ) void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1280,99 +1043,10 @@ void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUi
else else
nsAWritableCString::do_InsertFromReadable(aReadable, atPosition); nsAWritableCString::do_InsertFromReadable(aReadable, atPosition);
} }
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsCString::Insert(const nsCString& aString,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aString,0,aCount);
}
/**
* Insert a char* into this string at a specified offset.
*
* @update gess4/22/98
* @param char* aCString to be inserted into this string
* @param anOffset is insert pos in str
* @param aCounttells us how many chars to insert
* @return this
*/
void nsCString::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCount){
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(temp.mLength && (0<aCount)){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsCString::Insert(char aChar,PRUint32 anOffset){
char theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsCString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1676,55 +1350,6 @@ PRInt32 nsCString::CompareWithConversion(const char *aCString,PRBool aIgnoreCase
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsCString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsCString::operator==(const nsStr& S) const {return Equals(S);}
PRBool nsCString::operator==(const char* s) const {return Equals(s);}
//PRBool nsCString::operator==(const PRUnichar* s) const {return Equals(s);}
PRBool nsCString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
PRBool nsCString::operator!=(const char* s) const {return PRBool(Compare(nsCAutoString(s))!=0);}
//PRBool nsCString::operator!=(const PRUnichar* s) const {return PRBool(Compare(s)!=0);}
PRBool nsCString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
PRBool nsCString::operator<(const char* s) const {return PRBool(Compare(nsCAutoString(s))<0);}
//PRBool nsCString::operator<(const PRUnichar* s) const {return PRBool(Compare(s)<0);}
PRBool nsCString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
PRBool nsCString::operator>(const char* s) const {return PRBool(Compare(nsCAutoString(s))>0);}
//PRBool nsCString::operator>(const PRUnichar* s) const {return PRBool(Compare(s)>0);}
PRBool nsCString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
PRBool nsCString::operator<=(const char* s) const {return PRBool(Compare(nsCAutoString(s))<=0);}
//PRBool nsCString::operator<=(const PRUnichar* s) const {return PRBool(Compare(s)<=0);}
PRBool nsCString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
PRBool nsCString::operator>=(const char* s) const {return PRBool(Compare(nsCAutoString(s))>=0);}
//PRBool nsCString::operator>=(const PRUnichar* s) const {return PRBool(Compare(s)>=0);}
#endif
#ifndef NEW_STRING_APIS
PRBool nsCString::EqualsIgnoreCase(const nsStr& aString) const {
return Equals(aString,PR_TRUE);
}
#endif
PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const { PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
@ -1734,22 +1359,6 @@ PRBool nsCString::EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aLength) con
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsCString to be compared to
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsCString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
@ -1935,7 +1544,6 @@ void nsCString::DebugDump(void) const {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#ifdef NEW_STRING_APIS
NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString ) NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
{ {
nsReadingIterator<PRUnichar> start(aString.BeginReading()); nsReadingIterator<PRUnichar> start(aString.BeginReading());
@ -1947,7 +1555,6 @@ NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
start += start.size_forward(); start += start.size_forward();
} }
} }
#endif
void void
NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength ) NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength )

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -38,15 +36,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsCString_ #ifndef _nsCString_
#define _nsCString_ #define _nsCString_
@ -57,45 +46,19 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsIAtom.h" #include "nsIAtom.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#else
#define NS_LITERAL_STRING(s) (s)
#define NS_LITERAL_CSTRING(s) (s)
#define NS_DEF_DERIVED_STRING_OPERATOR_PLUS(_StringT, _CharT)
#define NS_DEF_2_STRING_STRING_OPERATOR_PLUS(_String1T, _String2T, _CharT)
inline
char
nsLiteralChar( char c )
{
return c;
}
inline
PRUnichar
nsLiteralPRUnichar( PRUnichar c )
{
return c;
}
#endif
class NS_COM nsSubsumeCStr; class NS_COM nsSubsumeCStr;
class NS_COM nsCString : class NS_COM nsCString :
#ifdef NEW_STRING_APIS
public nsAWritableCString, public nsAWritableCString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsCString"; } virtual const void* Implementation() const { return "nsCString"; }
virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const; virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 ); virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
/** /**
@ -109,36 +72,16 @@ public:
*/ */
nsCString(const nsCString& aString); nsCString(const nsCString& aString);
#ifdef NEW_STRING_APIS
explicit nsCString( const nsAReadableCString& ); explicit nsCString( const nsAReadableCString& );
nsCString(const char*); explicit nsCString(const char*);
nsCString(const char*, PRInt32); nsCString(const char*, PRInt32);
#else
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
nsCString(const char* aCString,PRInt32 aLength=-1);
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
//nsCString(const PRUnichar* aString,PRInt32 aLength=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsCString
*/
//nsCString(const nsStr&);
#endif
/** /**
* This constructor takes a subsumestr * This constructor takes a subsumestr
* @param reference to subsumestr * @param reference to subsumestr
*/ */
nsCString(nsSubsumeCStr& aSubsumeStr); explicit nsCString(nsSubsumeCStr& aSubsumeStr);
/** /**
* Destructor * Destructor
@ -186,17 +129,6 @@ public:
SetLength(anIndex); SetLength(anIndex);
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Accessor methods... Accessor methods...
*********************************************************************/ *********************************************************************/
@ -207,49 +139,8 @@ public:
*/ */
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
/**********************************************************************
String creation methods...
*********************************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new string
*/
nsSubsumeCStr operator+(const nsCString& aString);
/**
* create a new string by adding this to the given char*.
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(const char* aCString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(PRUnichar aChar);
nsSubsumeCStr operator+(char aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
*********************************************************************/ *********************************************************************/
@ -419,50 +310,16 @@ public:
*/ */
nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; } nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCString& operator=( char aChar ) { Assign(aChar); return *this; } nsCString& operator=( char aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(const PRUnichar*,PRInt32=-1); void AssignWithConversion(const PRUnichar*,PRInt32=-1);
void AssignWithConversion( const nsString& aString ); void AssignWithConversion( const nsString& aString );
#ifdef NEW_STRING_APIS
void AssignWithConversion( const nsAReadableString& aString ); void AssignWithConversion( const nsAReadableString& aString );
#endif
void AssignWithConversion(PRUnichar); void AssignWithConversion(PRUnichar);
#ifndef NEW_STRING_APIS
nsCString& Assign(const char* aString,PRInt32 aCount=-1);
nsCString& Assign(char aChar);
nsCString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsCString& Assign(const PRUnichar* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsCString& Assign(PRUnichar aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
//nsCString& operator=(PRUnichar aChar) {AssignWithConversion(aChar); return *this;}
nsCString& operator=(char aChar) {return Assign(aChar);}
//nsCString& operator=(const PRUnichar* aString) {AssignWithConversion(aString); return *this;}
//nsCString& operator=(const nsStr& aString) {return Assign(aString);}
nsCString& operator=(const char* aCString) {return Assign(aCString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& operator=(const nsSubsumeCStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsCString& operator=(nsSubsumeCStr& aSubsumeString);
#endif
#endif
/* /*
* Appends n characters from given string to this, * Appends n characters from given string to this,
* *
@ -475,42 +332,13 @@ public:
void AppendWithConversion(const nsString&, PRInt32=-1); void AppendWithConversion(const nsString&, PRInt32=-1);
void AppendWithConversion(PRUnichar aChar); void AppendWithConversion(PRUnichar aChar);
#ifdef NEW_STRING_APIS
void AppendWithConversion( const nsAReadableString& aString ); void AppendWithConversion( const nsAReadableString& aString );
#endif
void AppendWithConversion(const PRUnichar*, PRInt32=-1); void AppendWithConversion(const PRUnichar*, PRInt32=-1);
// Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine // Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine
void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16 void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16
void AppendFloat( double aFloat ); void AppendFloat( double aFloat );
#ifdef NEW_STRING_APIS
virtual void do_AppendFromReadable( const nsAReadableCString& ); virtual void do_AppendFromReadable( const nsAReadableCString& );
#endif
#ifndef NEW_STRING_APIS
//nsCString& Append(const nsStr& aString,PRInt32 aCount=-1);
nsCString& Append(const nsCString& aString,PRInt32 aCount);
nsCString& Append(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& Append(const char* aString,PRInt32 aCount=-1);
nsCString& Append(char aChar);
//nsCString& Append(PRUnichar aChar) {AppendWithConversion(aChar); return *this;}
//nsCString& Append(PRInt32 aInteger,PRInt32 aRadix=10) {AppendInt(aInteger,aRadix); return *this;}
//nsCString& Append(float aFloat) {AppendFloat(aFloat); return *this;}
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
nsCString& operator+=(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& operator+=(const char* aCString) {return Append(aCString);}
//nsCString& operator+=(const PRUnichar aChar) {return Append(aChar);}
nsCString& operator+=(const char aChar) {return Append(aChar);}
//nsCString& operator+=(const int anInt) {return Append(anInt,10);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
* starting at the leftmost offset. * starting at the leftmost offset.
@ -548,57 +376,7 @@ public:
void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset); void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset);
// Why no |InsertWithConversion(PRUnichar*)|? // Why no |InsertWithConversion(PRUnichar*)|?
#ifdef NEW_STRING_APIS
virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 ); virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 );
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsCString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
void Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//void Insert(PRUnichar aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset);}
void Insert(char aChar,PRUint32 anOffset);
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -699,96 +477,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars in given string you want to compare
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const nsStr& aString) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsStr &aString) const;
PRBool operator==(const char* aString) const;
//PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsStr &aString) const;
PRBool operator!=(const char* aString) const;
//PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsStr &aString) const;
PRBool operator<(const char* aString) const;
//PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsStr &S) const;
PRBool operator>(const char* aString) const;
//PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsStr &S) const;
PRBool operator<=(const char* aString) const;
//PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsStr &S) const;
PRBool operator>=(const char* aString) const;
//PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
void DebugDump(void) const; void DebugDump(void) const;
@ -799,28 +487,14 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( PRUnichar ); void operator=( PRUnichar );
#endif
void AssignWithConversion( char ); void AssignWithConversion( char );
void AssignWithConversion( const char*, PRInt32=-1 ); void AssignWithConversion( const char*, PRInt32=-1 );
void AppendWithConversion( char ); void AppendWithConversion( char );
void InsertWithConversion( char, PRUint32 ); void InsertWithConversion( char, PRUint32 );
}; };
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<char>
operator+( const nsPromiseConcatenation<char>& lhs, const nsCString& rhs )
{
return nsPromiseConcatenation<char>(lhs, rhs);
}
#endif
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char) NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCString, char);
#endif
extern NS_COM int fputs(const nsCString& aString, FILE* out); extern NS_COM int fputs(const nsCString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsCString& aString); //ostream& operator<<(ostream& aStream,const nsCString& aString);
@ -839,27 +513,20 @@ public:
virtual ~nsCAutoString(); virtual ~nsCAutoString();
nsCAutoString(); nsCAutoString();
nsCAutoString(const nsCString& ); explicit nsCAutoString(const nsCString& );
nsCAutoString(const nsAReadableCString& aString); explicit nsCAutoString(const nsAReadableCString& aString);
nsCAutoString(const char* aString); explicit nsCAutoString(const char* aString);
nsCAutoString(const char* aString,PRInt32 aLength); nsCAutoString(const char* aString,PRInt32 aLength);
nsCAutoString(const CBufDescriptor& aBuffer); explicit nsCAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsCAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
// nsCAutoString(const nsStr& aString);
// nsCAutoString(PRUnichar aChar);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const explicit nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const
#else #else
nsCAutoString(nsSubsumeCStr& aSubsumeStr); explicit nsCAutoString(nsSubsumeCStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; } nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
public: public:
@ -867,13 +534,6 @@ public:
nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; } nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; }
#else
nsCAutoString& operator=(const nsCString& aString) {nsCString::Assign(aString); return *this;}
nsCAutoString& operator=(const char* aCString) {nsCString::Assign(aCString); return *this;}
// nsCAutoString& operator=(const PRUnichar* aString) {nsCString::Assign(aString); return *this;}
// nsCAutoString& operator=(PRUnichar aChar) {nsCString::Assign(aChar); return *this;}
nsCAutoString& operator=(char aChar) {nsCString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -884,14 +544,6 @@ public:
char mBuffer[kDefaultStringSize]; char mBuffer[kDefaultStringSize];
}; };
#if 0//def NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCAutoString, char)
#endif
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCAutoString, char)
#endif
/** /**
* A helper class that converts a UCS2 string to UTF8 * A helper class that converts a UCS2 string to UTF8
*/ */
@ -902,6 +554,7 @@ class NS_COM NS_ConvertUCS2toUTF8
*/ */
{ {
public: public:
explicit
NS_ConvertUCS2toUTF8( const PRUnichar* aString ) NS_ConvertUCS2toUTF8( const PRUnichar* aString )
{ {
Append( aString, ~PRUint32(0) /* MAXINT */); Append( aString, ~PRUint32(0) /* MAXINT */);
@ -912,14 +565,13 @@ class NS_COM NS_ConvertUCS2toUTF8
Append( aString, aLength ); Append( aString, aLength );
} }
explicit
NS_ConvertUCS2toUTF8( PRUnichar aChar ) NS_ConvertUCS2toUTF8( PRUnichar aChar )
{ {
Append( &aChar, 1 ); Append( &aChar, 1 );
} }
#ifdef NEW_STRING_APIS explicit NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
#endif
operator const char*() const operator const char*() const
{ {
@ -950,19 +602,17 @@ class NS_COM NS_ConvertUCS2toUTF8
***************************************************************/ ***************************************************************/
class NS_COM nsSubsumeCStr : public nsCString { class NS_COM nsSubsumeCStr : public nsCString {
public: public:
nsSubsumeCStr(nsStr& aString); explicit nsSubsumeCStr(nsStr& aString);
nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; } nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; } nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
#endif
}; };

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -69,25 +67,10 @@ nsString::nsString() {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
} }
#if 0
/**
* This constructor accepts an ascii string
* @update gess 1/4/99
* @param aCString is a ptr to a 1-byte cstr
* @param aLength tells us how many chars to copy from given CString
*/
nsString::nsString(const char* aCString,PRInt32 aCount){
Initialize(*this,eTwoByte);
AssignWithConversion(aCString,aCount);
}
#endif
#ifdef NEW_STRING_APIS
nsString::nsString(const PRUnichar* aString) { nsString::nsString(const PRUnichar* aString) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aString); Assign(aString);
} }
#endif
/** /**
* This constructor accepts a unicode string * This constructor accepts a unicode string
@ -100,18 +83,6 @@ nsString::nsString(const PRUnichar* aString,PRInt32 aCount) {
Assign(aString,aCount); Assign(aString,aCount);
} }
#if 0
/**
* This constructor works for all other nsSTr derivatives
* @update gess 1/4/99
* @param reference to another nsCString
*/
nsString::nsString(const nsStr &aString) {
Initialize(*this,eTwoByte);
StrAssign(*this,aString,0,aString.mLength);
}
#endif
/** /**
* This is our copy constructor * This is our copy constructor
* @update gess 1/4/99 * @update gess 1/4/99
@ -149,7 +120,6 @@ nsString::~nsString() {
nsStr::Destroy(*this); nsStr::Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -199,7 +169,6 @@ nsString::nsString( const nsAReadableString& aReadable ) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -275,36 +244,6 @@ const PRUnichar* nsString::GetUnicode(void) const {
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsString::Last(void) const{
return GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
* @param aChar is the char you want to write into this string * @param aChar is the char you want to write into this string
@ -330,81 +269,6 @@ PRBool nsString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsStr& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsString& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const char* aCString) {
nsString temp(*this);
temp.AppendWithConversion(aCString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(char aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aString is a ptr to unistring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const PRUnichar* aString) {
nsString temp(*this);
temp.Append(aString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a unichar to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(PRUnichar aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -952,26 +816,6 @@ PRInt32 nsString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: nsStr to be appended
* @return this
*/
nsString& nsString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
#endif
/** /**
* assign given char* to this string * assign given char* to this string
@ -989,33 +833,13 @@ void nsString::AssignWithConversion(const char* aCString,PRInt32 aCount) {
} }
} }
#ifdef NEW_STRING_APIS
void nsString::AssignWithConversion(const char* aCString) { void nsString::AssignWithConversion(const char* aCString) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
if(aCString){ if(aCString){
AppendWithConversion(aCString); AppendWithConversion(aCString);
} }
} }
#endif
#ifndef NEW_STRING_APIS
/**
* assign given unichar* to this string
* @update gess 01/04/99
* @param aString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Assign(const PRUnichar* aString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aString){
Append(aString,aCount);
}
return *this;
}
#endif
/** /**
* assign given char to this string * assign given char to this string
@ -1028,39 +852,6 @@ void nsString::AssignWithConversion(char aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifndef NEW_STRING_APIS
/**
* assign given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsString& nsString::Assign(PRUnichar aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
#endif
#ifndef NEW_STRING_APIS
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& nsString::operator=(const nsSubsumeStr& aSubsumeString) {
nsSubsumeStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compilers
Subsume(*this,temp);
#else
nsString& nsString::operator=(nsSubsumeStr& aSubsumeString) {
Subsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* append given c-string to this string * append given c-string to this string
@ -1169,96 +960,6 @@ void nsString::AppendFloat(double aFloat){
} }
#ifndef NEW_STRING_APIS
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
#if 0
nsString& nsString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given string to this string
* I don't think we need this method now that we have the previous one.
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsString& nsString::Append(const nsString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
/**
* append given unicode string to this
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Append(const PRUnichar* aString,PRInt32 aCount) {
if(aString && aCount){ //if astring is null or count==0 there's nothing to do
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsString& nsString::Append(PRUnichar aChar) {
PRUnichar buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/* /*
* Copies n characters from this left of this string to given string, * Copies n characters from this left of this string to given string,
@ -1349,98 +1050,8 @@ void nsString::InsertWithConversion(const char* aCString,PRUint32 anOffset,PRInt
} }
} }
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsString::Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aCopy,0,aCount);
}
/**
* Insert a unicode* into this string at a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
void nsString::Insert(const PRUnichar* aString,PRUint32 anOffset,PRInt32 aCount){
if(aString && aCount){
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsString::Insert(PRUnichar aChar,PRUint32 anOffset){
PRUnichar theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1823,55 +1434,7 @@ PRInt32 nsString::CompareWithConversion(const PRUnichar* aString,PRBool aIgnoreC
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsString::operator==(const nsString& S) const {return Equals(S);}
//PRBool nsString::operator==(const nsStr& S) const {return Equals(S);}
//PRBool nsString::operator==(const char* s) const {return Equals(s);}
PRBool nsString::operator==(const PRUnichar* s) const {return Equals(nsAutoString(s));}
PRBool nsString::operator!=(const nsString& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const char* s) const {return PRBool(Compare(s)!=0);}
PRBool nsString::operator!=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))!=0);}
PRBool nsString::operator<(const nsString& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const char* s) const {return PRBool(Compare(s)<0);}
PRBool nsString::operator<(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<0);}
PRBool nsString::operator>(const nsString& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const char* s) const {return PRBool(Compare(s)>0);}
PRBool nsString::operator>(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>0);}
PRBool nsString::operator<=(const nsString& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const char* s) const {return PRBool(Compare(s)<=0);}
PRBool nsString::operator<=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<=0);}
PRBool nsString::operator>=(const nsString& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const char* s) const {return PRBool(Compare(s)>=0);}
PRBool nsString::operator>=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>=0);}
#endif // !defined(NEW_STRING_APIS)
PRBool nsString::EqualsIgnoreCase(const nsString& aString) const { PRBool nsString::EqualsIgnoreCase(const nsString& aString) const {
return EqualsWithConversion(aString,PR_TRUE); return EqualsWithConversion(aString,PR_TRUE);
@ -1881,12 +1444,6 @@ PRBool nsString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
#ifndef NEW_STRING_APIS
PRBool nsString::EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const {
return Equals(s1,s2,PR_TRUE);
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
* *
@ -1963,40 +1520,6 @@ PRBool nsString::EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const {
return EqualsAtom(aAtom,PR_TRUE); return EqualsAtom(aAtom,PR_TRUE);
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsString to be compared to
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
/**
* Compare given strings
* @update gess 7/27/98
* @param s1 -- first unichar string to be compared
* @param s2 -- second unichar string to be compared
* @return TRUE if equal
*/
PRBool nsString::Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase) const {
NS_ASSERTION(0!=s1,kNullPointerError);
NS_ASSERTION(0!=s2,kNullPointerError);
PRBool result=PR_FALSE;
if((s1) && (s2)){
PRInt32 cmp=(aIgnoreCase) ? nsCRT::strcasecmp(s1,s2) : nsCRT::strcmp(s1,s2);
result=PRBool(0==cmp);
}
return result;
}
#endif
/** /**
* Determine if given char in valid alpha range * Determine if given char in valid alpha range
@ -2321,21 +1844,6 @@ NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( char aChar )
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsAReadableCString& )
{
// ...
}
#else
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsCString& )
{
// ...
}
#endif
#endif
void void
NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength ) NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength )
{ {

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -39,16 +37,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsString_ #ifndef _nsString_
#define _nsString_ #define _nsString_
@ -60,9 +48,7 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsCRT.h" #include "nsCRT.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#endif
#ifdef STANDALONE_MI_STRING_TESTS #ifdef STANDALONE_MI_STRING_TESTS
class nsAReadableString { public: virtual ~nsAReadableString() { } }; class nsAReadableString { public: virtual ~nsAReadableString() { } };
@ -78,17 +64,13 @@ class nsISizeOfHandler;
class NS_COM nsSubsumeStr; class NS_COM nsSubsumeStr;
class NS_COM nsString : class NS_COM nsString :
#if defined(NEW_STRING_APIS) || defined(STANDALONE_MI_STRING_TESTS)
public nsAWritableString, public nsAWritableString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsString"; } virtual const void* Implementation() const { return "nsString"; }
virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const; virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ); virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
@ -103,30 +85,10 @@ public:
*/ */
nsString(const nsString& aString); nsString(const nsString& aString);
#ifdef NEW_STRING_APIS
explicit nsString(const nsAReadableString&); explicit nsString(const nsAReadableString&);
nsString(const PRUnichar*); explicit nsString(const PRUnichar*);
nsString(const PRUnichar*, PRInt32); nsString(const PRUnichar*, PRInt32);
#else
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
nsString(const PRUnichar* aString,PRInt32 aCount=-1);
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
//nsString(const char* aCString,PRInt32 aCount=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsString
*/
//nsString(const nsStr&);
#endif
/** /**
@ -134,9 +96,9 @@ public:
* @param reference to subsumestr * @param reference to subsumestr
*/ */
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here explicit nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here
#else #else
nsString(nsSubsumeStr& aSubsumeStr); explicit nsString(nsSubsumeStr& aSubsumeStr);
#endif #endif
/** /**
@ -198,17 +160,6 @@ public:
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Getters/Setters... Getters/Setters...
*********************************************************************/ *********************************************************************/
@ -219,63 +170,12 @@ public:
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
const PRUnichar* GetUnicode(void) const; const PRUnichar* GetUnicode(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Set nth character. * Set nth character.
*/ */
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
#ifndef NEW_STRING_APIS
/**********************************************************************
String concatenation methods...
*********************************************************************/
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new subsumable string
*/
nsSubsumeStr operator+(const nsStr& aString);
nsSubsumeStr operator+(const nsString& aString);
/**
* create a new string by adding this to the given cstring
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const char* aCString);
/**
* create a new string by adding this to the given prunichar*.
* @param aString is a ptr to UC-string to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const PRUnichar* aString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(char aChar);
/**
* create a new string by adding this to the given char.
* @param aChar is a unichar to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(PRUnichar aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -449,47 +349,14 @@ public:
*/ */
nsString& operator=( const nsString& aString ) { Assign(aString); return *this; } nsString& operator=( const nsString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(char); void AssignWithConversion(char);
#ifdef NEW_STRING_APIS
void AssignWithConversion(const char*); void AssignWithConversion(const char*);
void AssignWithConversion(const char*, PRInt32); void AssignWithConversion(const char*, PRInt32);
#else
void AssignWithConversion(const char*, PRInt32=-1);
nsString& Assign(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Assign(PRUnichar aChar);
nsString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsString& Assign(const char* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsString& Assign(char aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
nsString& operator=(PRUnichar aChar) {Assign(aChar); return *this;}
//nsString& operator=(char aChar) {AssignWithConversion(aChar); return *this;}
//nsString& operator=(const char* aCString) {AssignWithConversion(aCString); return *this;}
//nsString& operator=(const nsStr& aString) {return Assign(aString);}
nsString& operator=(const PRUnichar* aString) {return Assign(aString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& operator=(const nsSubsumeStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsString& operator=(nsSubsumeStr& aSubsumeString);
#endif
#endif
/* /*
@ -507,42 +374,6 @@ public:
virtual void do_AppendFromElement( PRUnichar ); virtual void do_AppendFromElement( PRUnichar );
#ifndef NEW_STRING_APIS
/*
* Appends n characters from given string to this,
*
* @param aString is the source to be appended to this
* @param aCount -- number of chars to copy; -1 tells us to compute the strlen for you
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
* @return number of chars copied
*/
//nsString& Append(const nsStr& aString,PRInt32 aCount);
//nsString& Append(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const nsString& aString,PRInt32 aCount);
nsString& Append(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Append(PRUnichar aChar);
//nsString& Append(const char* aString,PRInt32 aCount=-1) { AppendWithConversion(aString,aCount); return *this; }
//nsString& Append(char aChar) { AppendWithConversion(aChar); return *this; }
//nsString& Append(PRInt32 aInteger,PRInt32 aRadix=10) { AppendInt(aInteger,aRadix); return *this; }
//nsString& Append(float aFloat) { AppendFloat(aFloat); return *this; }
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
//nsString& operator+=(const char* aCString) {return Append(aCString);}
//nsString& operator+=(const char aChar) {return Append((PRUnichar) (unsigned char)aChar);}
nsString& operator+=(const PRUnichar aChar) {return Append(aChar);}
//nsString& operator+=(const int anInt) {return Append(anInt,10);}
//nsString& operator+=(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const PRUnichar* aUCString) {return Append(aUCString);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
@ -581,55 +412,6 @@ public:
//void InsertWithConversion(char); //void InsertWithConversion(char);
void InsertWithConversion(const char*, PRUint32, PRInt32=-1); void InsertWithConversion(const char*, PRUint32, PRInt32=-1);
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1) {InsertWithConversion(aChar, anOffset, aCount); return *this;}
void Insert(const PRUnichar* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(char aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset); return *this;}
void Insert(PRUnichar aChar,PRUint32 anOffset);
#endif
#ifndef NEW_STRING_APIS
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -739,110 +521,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const; PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars to be compared.
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(/*FIX: const */nsIAtom* anAtom,PRBool aIgnoreCase) const { return EqualsAtom(anAtom, aIgnoreCase); }
PRBool Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase=PR_FALSE) const;
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsString &aString) const;
//PRBool operator==(const nsStr &aString) const;
//PRBool operator==(const char *aString) const;
PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsString &aString) const;
//PRBool operator!=(const nsStr &aString) const;
//PRBool operator!=(const char* aString) const;
PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsString &aString) const;
//PRBool operator<(const nsStr &aString) const;
//PRBool operator<(const char* aString) const;
PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsString &aString) const;
//PRBool operator>(const nsStr &S) const;
//PRBool operator>(const char* aString) const;
PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsString &aString) const;
//PRBool operator<=(const nsStr &S) const;
//PRBool operator<=(const char* aString) const;
PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsString &aString) const;
//PRBool operator>=(const nsStr &S) const;
//PRBool operator>=(const char* aString) const;
PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Determine if given buffer is plain ascii * Determine if given buffer is plain ascii
@ -884,9 +562,7 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( char ); void operator=( char );
#endif
void AssignWithConversion( PRUnichar ); void AssignWithConversion( PRUnichar );
void AssignWithConversion( const PRUnichar*, PRInt32=-1 ); void AssignWithConversion( const PRUnichar*, PRInt32=-1 );
void AppendWithConversion( PRUnichar ); void AppendWithConversion( PRUnichar );
@ -894,19 +570,7 @@ private:
void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 ); void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 );
}; };
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar) NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsString, PRUnichar)
#endif
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<PRUnichar>
operator+( const nsPromiseConcatenation<PRUnichar>& lhs, const nsString& rhs )
{
return nsPromiseConcatenation<PRUnichar>(lhs, rhs);
}
#endif
extern NS_COM int fputs(const nsString& aString, FILE* out); extern NS_COM int fputs(const nsString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsString& aString); //ostream& operator<<(ostream& aStream,const nsString& aString);
@ -924,27 +588,21 @@ public:
virtual ~nsAutoString(); virtual ~nsAutoString();
nsAutoString(); nsAutoString();
nsAutoString(const nsAutoString& aString); nsAutoString(const nsAutoString& aString);
nsAutoString(const nsAReadableString& aString); explicit nsAutoString(const nsAReadableString& aString);
nsAutoString(const nsString& aString); explicit nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString); explicit nsAutoString(const PRUnichar* aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength); nsAutoString(const PRUnichar* aString,PRInt32 aLength);
nsAutoString(PRUnichar aChar); explicit nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer); explicit nsAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsAutoString(const char* aCString,PRInt32 aLength=-1);
// nsAutoString(const nsStr& aString);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const explicit nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const
#else #else
nsAutoString(nsSubsumeStr& aSubsumeStr); explicit nsAutoString(nsSubsumeStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; } nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
public: public:
@ -952,13 +610,6 @@ public:
nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#else
nsAutoString& operator=(const nsStr& aString) {nsString::Assign(aString); return *this;}
// nsAutoString& operator=(const char* aCString) {nsString::Assign(aCString); return *this;}
// nsAutoString& operator=(char aChar) {nsString::Assign(aChar); return *this;}
nsAutoString& operator=(const PRUnichar* aBuffer) {nsString::Assign(aBuffer); return *this;}
nsAutoString& operator=(PRUnichar aChar) {nsString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -969,10 +620,6 @@ public:
char mBuffer[kDefaultStringSize<<eTwoByte]; char mBuffer[kDefaultStringSize<<eTwoByte];
}; };
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsAutoString, PRUnichar)
#endif
class NS_COM NS_ConvertASCIItoUCS2 class NS_COM NS_ConvertASCIItoUCS2
: public nsAutoString : public nsAutoString
/* /*
@ -980,19 +627,10 @@ class NS_COM NS_ConvertASCIItoUCS2
*/ */
{ {
public: public:
NS_ConvertASCIItoUCS2( const char* ); explicit NS_ConvertASCIItoUCS2( const char* );
NS_ConvertASCIItoUCS2( const char*, PRUint32 ); NS_ConvertASCIItoUCS2( const char*, PRUint32 );
NS_ConvertASCIItoUCS2( char ); explicit NS_ConvertASCIItoUCS2( char );
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2( const nsAReadableCString& );
#else
class nsCString;
NS_ConvertASCIItoUCS2( const nsCString& );
#endif
#endif
#ifdef NEW_STRING_APIS
operator const PRUnichar*() const operator const PRUnichar*() const
{ {
return GetUnicode(); return GetUnicode();
@ -1002,7 +640,6 @@ class NS_COM NS_ConvertASCIItoUCS2
{ {
return nsLiteralString(mUStr, mLength); return nsLiteralString(mUStr, mLength);
} }
#endif
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
@ -1036,6 +673,7 @@ class NS_COM NS_ConvertUTF8toUCS2
: public nsAutoString : public nsAutoString
{ {
public: public:
explicit
NS_ConvertUTF8toUCS2( const char* aCString ) NS_ConvertUTF8toUCS2( const char* aCString )
{ {
Init( aCString, ~PRUint32(0) /* MAXINT */ ); Init( aCString, ~PRUint32(0) /* MAXINT */ );
@ -1046,6 +684,7 @@ class NS_COM NS_ConvertUTF8toUCS2
Init( aCString, aLength ); Init( aCString, aLength );
} }
explicit
NS_ConvertUTF8toUCS2( char aChar ) NS_ConvertUTF8toUCS2( char aChar )
{ {
Init( &aChar, 1 ); Init( &aChar, 1 );
@ -1079,20 +718,18 @@ class NS_COM NS_ConvertUTF8toUCS2
class NS_COM nsSubsumeStr : public nsString { class NS_COM nsSubsumeStr : public nsString {
public: public:
nsSubsumeStr(); nsSubsumeStr();
nsSubsumeStr(nsStr& aString); explicit nsSubsumeStr(nsStr& aString);
nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
#endif
}; };

View File

@ -17,22 +17,11 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
/*********************************************************************** /***********************************************************************
MODULE NOTES: MODULE NOTES:
@ -431,21 +420,6 @@ struct NS_COM nsStr {
*/ */
static PRUint32 HashCode(const nsStr& aDest); static PRUint32 HashCode(const nsStr& aDest);
#ifndef NEW_STRING_APIS
static void Append(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAppend(aDest, aSource, anOffset, aCount);
}
static void Assign(nsStr& aDest,const nsStr& aSource,PRUint32 anOffset,PRInt32 aCount) {
StrAssign(aDest, aSource, anOffset, aCount);
}
static void Insert( nsStr& aDest,PRUint32 aDestOffset,const nsStr& aSource,PRUint32 aSrcOffset,PRInt32 aCount) {
StrInsert(aDest, aDestOffset, aSource, aSrcOffset, aCount);
}
static PRInt32 Compare(const nsStr& aDest,const nsStr& aSource,PRInt32 aCount,PRBool aIgnoreCase) {
return StrCompare(aDest, aSource, aCount, aIgnoreCase);
}
#endif
#ifdef NS_STR_STATS #ifdef NS_STR_STATS
/** /**
* Prints an nsStr. If truncate is true, the string is only printed up to * Prints an nsStr. If truncate is true, the string is only printed up to

View File

@ -70,12 +70,10 @@ nsCString::nsCString() {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
} }
#ifdef NEW_STRING_APIS
nsCString::nsCString(const char* aCString) { nsCString::nsCString(const char* aCString) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aCString); Assign(aCString);
} }
#endif
/** /**
* This constructor accepts an ascii string * This constructor accepts an ascii string
@ -137,7 +135,6 @@ nsCString::~nsCString() {
Destroy(*this); Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const char* nsCString::GetReadableFragment( nsReadableFragment<char>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -172,7 +169,6 @@ nsCString::nsCString( const nsAReadableCString& aReadable ) {
Initialize(*this,eOneByte); Initialize(*this,eOneByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsCString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -232,35 +228,6 @@ const char* nsCString::GetBuffer(void) const {
return mStr; return mStr;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsCString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsCString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsCString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsCString::Last(void) const{
return (char)GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
@ -281,57 +248,6 @@ PRBool nsCString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
/********************************************************* /*********************************************************
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeCStr nsCString::operator+(const nsCString& aString){
nsCString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(const char* aCString) {
nsCString temp(*this);
temp.Append(aCString);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created subsumable string
*/
nsSubsumeCStr nsCString::operator+(PRUnichar aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr nsCString::operator+(char aChar) {
nsCString temp(*this);
temp.Append(aChar);
return nsSubsumeCStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -843,73 +759,6 @@ PRInt32 nsCString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
String manipulation methods... String manipulation methods...
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: string to be appended
* @return this
*/
nsCString& nsCString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
/**
* assign given char* to this string
* @update gess 01/04/99
* @param aCString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Assign(const char* aCString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aCString){
Append(aCString,aCount);
}
return *this;
}
/**
* assign given char to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsCString& nsCString::Assign(char aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& nsCString::operator=(const nsSubsumeCStr& aSubsumeString) {
nsSubsumeCStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compiler
CSubsume(*this,temp);
#else
nsCString& nsCString::operator=(nsSubsumeCStr& aSubsumeString) {
CSubsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* assign given unichar* to this string * assign given unichar* to this string
@ -952,7 +801,6 @@ void nsCString::AssignWithConversion( const nsString& aString ) {
AssignWithConversion(aString.GetUnicode(), aString.Length()); AssignWithConversion(aString.GetUnicode(), aString.Length());
} }
#ifdef NEW_STRING_APIS
void nsCString::AssignWithConversion( const nsAReadableString& aString ) { void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -976,9 +824,7 @@ void nsCString::AssignWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
#ifdef NEW_STRING_APIS
void nsCString::AppendWithConversion( const nsAReadableString& aString ) { void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
PRInt32 count = aString.Length(); PRInt32 count = aString.Length();
@ -1001,7 +847,6 @@ void nsCString::AppendWithConversion( const nsAReadableString& aString ) {
} }
} }
} }
#endif
/** /**
* assign given unichar to this string * assign given unichar to this string
@ -1014,7 +859,6 @@ void nsCString::AssignWithConversion(PRUnichar aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable ) void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1022,87 +866,7 @@ void nsCString::do_AppendFromReadable( const nsAReadableCString& aReadable )
else else
nsAWritableCString::do_AppendFromReadable(aReadable); nsAWritableCString::do_AppendFromReadable(aReadable);
} }
#endif
#ifndef NEW_STRING_APIS
/**
* append given string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsCString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#if 0
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsCString& nsCString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given c-string to this string
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount: #of chars to be copied; -1 means to copy the whole thing
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsCString& nsCString::Append(const char* aCString,PRInt32 aCount) {
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsCString& nsCString::Append(char aChar) {
char buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/** /**
* append given char to this string * append given char to this string
@ -1272,7 +1036,6 @@ void nsCString::InsertWithConversion(PRUnichar aChar,PRUint32 anOffset){
StrInsert(*this,anOffset,temp,0,1); StrInsert(*this,anOffset,temp,0,1);
} }
#ifdef NEW_STRING_APIS
void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition ) void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUint32 atPosition )
{ {
if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) ) if ( SameImplementation( NS_STATIC_CAST(const nsAReadableCString&, *this), aReadable) )
@ -1280,99 +1043,10 @@ void nsCString::do_InsertFromReadable( const nsAReadableCString& aReadable, PRUi
else else
nsAWritableCString::do_InsertFromReadable(aReadable, atPosition); nsAWritableCString::do_InsertFromReadable(aReadable, atPosition);
} }
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsCString::Insert(const nsCString& aString,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aString,0,aCount);
}
/**
* Insert a char* into this string at a specified offset.
*
* @update gess4/22/98
* @param char* aCString to be inserted into this string
* @param anOffset is insert pos in str
* @param aCounttells us how many chars to insert
* @return this
*/
void nsCString::Insert(const char* aCString,PRUint32 anOffset,PRInt32 aCount){
if(aCString){
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=(char*)aCString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aCString);
if(temp.mLength && (0<aCount)){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsCString::Insert(char aChar,PRUint32 anOffset){
char theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eOneByte);
temp.mStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsCString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1676,55 +1350,6 @@ PRInt32 nsCString::CompareWithConversion(const char *aCString,PRBool aIgnoreCase
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsCString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsCString::operator==(const nsStr& S) const {return Equals(S);}
PRBool nsCString::operator==(const char* s) const {return Equals(s);}
//PRBool nsCString::operator==(const PRUnichar* s) const {return Equals(s);}
PRBool nsCString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
PRBool nsCString::operator!=(const char* s) const {return PRBool(Compare(nsCAutoString(s))!=0);}
//PRBool nsCString::operator!=(const PRUnichar* s) const {return PRBool(Compare(s)!=0);}
PRBool nsCString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
PRBool nsCString::operator<(const char* s) const {return PRBool(Compare(nsCAutoString(s))<0);}
//PRBool nsCString::operator<(const PRUnichar* s) const {return PRBool(Compare(s)<0);}
PRBool nsCString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
PRBool nsCString::operator>(const char* s) const {return PRBool(Compare(nsCAutoString(s))>0);}
//PRBool nsCString::operator>(const PRUnichar* s) const {return PRBool(Compare(s)>0);}
PRBool nsCString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
PRBool nsCString::operator<=(const char* s) const {return PRBool(Compare(nsCAutoString(s))<=0);}
//PRBool nsCString::operator<=(const PRUnichar* s) const {return PRBool(Compare(s)<=0);}
PRBool nsCString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
PRBool nsCString::operator>=(const char* s) const {return PRBool(Compare(nsCAutoString(s))>=0);}
//PRBool nsCString::operator>=(const PRUnichar* s) const {return PRBool(Compare(s)>=0);}
#endif
#ifndef NEW_STRING_APIS
PRBool nsCString::EqualsIgnoreCase(const nsStr& aString) const {
return Equals(aString,PR_TRUE);
}
#endif
PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const { PRBool nsCString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
@ -1734,22 +1359,6 @@ PRBool nsCString::EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aLength) con
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsCString to be compared to
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsCString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
@ -1935,7 +1544,6 @@ void nsCString::DebugDump(void) const {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#ifdef NEW_STRING_APIS
NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString ) NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
{ {
nsReadingIterator<PRUnichar> start(aString.BeginReading()); nsReadingIterator<PRUnichar> start(aString.BeginReading());
@ -1947,7 +1555,6 @@ NS_ConvertUCS2toUTF8::NS_ConvertUCS2toUTF8( const nsAReadableString& aString )
start += start.size_forward(); start += start.size_forward();
} }
} }
#endif
void void
NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength ) NS_ConvertUCS2toUTF8::Append( const PRUnichar* aString, PRUint32 aLength )

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -38,15 +36,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsCString_ #ifndef _nsCString_
#define _nsCString_ #define _nsCString_
@ -57,45 +46,19 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsIAtom.h" #include "nsIAtom.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#else
#define NS_LITERAL_STRING(s) (s)
#define NS_LITERAL_CSTRING(s) (s)
#define NS_DEF_DERIVED_STRING_OPERATOR_PLUS(_StringT, _CharT)
#define NS_DEF_2_STRING_STRING_OPERATOR_PLUS(_String1T, _String2T, _CharT)
inline
char
nsLiteralChar( char c )
{
return c;
}
inline
PRUnichar
nsLiteralPRUnichar( PRUnichar c )
{
return c;
}
#endif
class NS_COM nsSubsumeCStr; class NS_COM nsSubsumeCStr;
class NS_COM nsCString : class NS_COM nsCString :
#ifdef NEW_STRING_APIS
public nsAWritableCString, public nsAWritableCString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsCString"; } virtual const void* Implementation() const { return "nsCString"; }
virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const; virtual const char* GetReadableFragment( nsReadableFragment<char>&, nsFragmentRequest, PRUint32 ) const;
virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 ); virtual char* GetWritableFragment( nsWritableFragment<char>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
/** /**
@ -109,36 +72,16 @@ public:
*/ */
nsCString(const nsCString& aString); nsCString(const nsCString& aString);
#ifdef NEW_STRING_APIS
explicit nsCString( const nsAReadableCString& ); explicit nsCString( const nsAReadableCString& );
nsCString(const char*); explicit nsCString(const char*);
nsCString(const char*, PRInt32); nsCString(const char*, PRInt32);
#else
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
nsCString(const char* aCString,PRInt32 aLength=-1);
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
//nsCString(const PRUnichar* aString,PRInt32 aLength=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsCString
*/
//nsCString(const nsStr&);
#endif
/** /**
* This constructor takes a subsumestr * This constructor takes a subsumestr
* @param reference to subsumestr * @param reference to subsumestr
*/ */
nsCString(nsSubsumeCStr& aSubsumeStr); explicit nsCString(nsSubsumeCStr& aSubsumeStr);
/** /**
* Destructor * Destructor
@ -186,17 +129,6 @@ public:
SetLength(anIndex); SetLength(anIndex);
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Accessor methods... Accessor methods...
*********************************************************************/ *********************************************************************/
@ -207,49 +139,8 @@ public:
*/ */
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
/**********************************************************************
String creation methods...
*********************************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new string
*/
nsSubsumeCStr operator+(const nsCString& aString);
/**
* create a new string by adding this to the given char*.
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(const char* aCString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeCStr operator+(PRUnichar aChar);
nsSubsumeCStr operator+(char aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
*********************************************************************/ *********************************************************************/
@ -419,50 +310,16 @@ public:
*/ */
nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; } nsCString& operator=( const nsCString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCString& operator=( char aChar ) { Assign(aChar); return *this; } nsCString& operator=( char aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(const PRUnichar*,PRInt32=-1); void AssignWithConversion(const PRUnichar*,PRInt32=-1);
void AssignWithConversion( const nsString& aString ); void AssignWithConversion( const nsString& aString );
#ifdef NEW_STRING_APIS
void AssignWithConversion( const nsAReadableString& aString ); void AssignWithConversion( const nsAReadableString& aString );
#endif
void AssignWithConversion(PRUnichar); void AssignWithConversion(PRUnichar);
#ifndef NEW_STRING_APIS
nsCString& Assign(const char* aString,PRInt32 aCount=-1);
nsCString& Assign(char aChar);
nsCString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsCString& Assign(const PRUnichar* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsCString& Assign(PRUnichar aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
//nsCString& operator=(PRUnichar aChar) {AssignWithConversion(aChar); return *this;}
nsCString& operator=(char aChar) {return Assign(aChar);}
//nsCString& operator=(const PRUnichar* aString) {AssignWithConversion(aString); return *this;}
//nsCString& operator=(const nsStr& aString) {return Assign(aString);}
nsCString& operator=(const char* aCString) {return Assign(aCString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsCString& operator=(const nsSubsumeCStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsCString& operator=(nsSubsumeCStr& aSubsumeString);
#endif
#endif
/* /*
* Appends n characters from given string to this, * Appends n characters from given string to this,
* *
@ -475,42 +332,13 @@ public:
void AppendWithConversion(const nsString&, PRInt32=-1); void AppendWithConversion(const nsString&, PRInt32=-1);
void AppendWithConversion(PRUnichar aChar); void AppendWithConversion(PRUnichar aChar);
#ifdef NEW_STRING_APIS
void AppendWithConversion( const nsAReadableString& aString ); void AppendWithConversion( const nsAReadableString& aString );
#endif
void AppendWithConversion(const PRUnichar*, PRInt32=-1); void AppendWithConversion(const PRUnichar*, PRInt32=-1);
// Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine // Why no |AppendWithConversion(const PRUnichar*, PRInt32)|? --- now I know, because implicit construction hid the need for this routine
void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16 void AppendInt(PRInt32 aInteger,PRInt32 aRadix=10); //radix=8,10 or 16
void AppendFloat( double aFloat ); void AppendFloat( double aFloat );
#ifdef NEW_STRING_APIS
virtual void do_AppendFromReadable( const nsAReadableCString& ); virtual void do_AppendFromReadable( const nsAReadableCString& );
#endif
#ifndef NEW_STRING_APIS
//nsCString& Append(const nsStr& aString,PRInt32 aCount=-1);
nsCString& Append(const nsCString& aString,PRInt32 aCount);
nsCString& Append(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& Append(const char* aString,PRInt32 aCount=-1);
nsCString& Append(char aChar);
//nsCString& Append(PRUnichar aChar) {AppendWithConversion(aChar); return *this;}
//nsCString& Append(PRInt32 aInteger,PRInt32 aRadix=10) {AppendInt(aInteger,aRadix); return *this;}
//nsCString& Append(float aFloat) {AppendFloat(aFloat); return *this;}
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
nsCString& operator+=(const nsCString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsCString& operator+=(const char* aCString) {return Append(aCString);}
//nsCString& operator+=(const PRUnichar aChar) {return Append(aChar);}
nsCString& operator+=(const char aChar) {return Append(aChar);}
//nsCString& operator+=(const int anInt) {return Append(anInt,10);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
* starting at the leftmost offset. * starting at the leftmost offset.
@ -548,57 +376,7 @@ public:
void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset); void InsertWithConversion(PRUnichar aChar,PRUint32 anOffset);
// Why no |InsertWithConversion(PRUnichar*)|? // Why no |InsertWithConversion(PRUnichar*)|?
#ifdef NEW_STRING_APIS
virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 ); virtual void do_InsertFromReadable( const nsAReadableCString&, PRUint32 );
#endif
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsCString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
void Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//void Insert(PRUnichar aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset);}
void Insert(char aChar,PRUint32 anOffset);
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -699,96 +477,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const PRUnichar* aString,PRInt32 aCount=-1) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars in given string you want to compare
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const nsStr& aString) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsStr &aString) const;
PRBool operator==(const char* aString) const;
//PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsStr &aString) const;
PRBool operator!=(const char* aString) const;
//PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsStr &aString) const;
PRBool operator<(const char* aString) const;
//PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsStr &S) const;
PRBool operator>(const char* aString) const;
//PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsStr &S) const;
PRBool operator<=(const char* aString) const;
//PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsStr &S) const;
PRBool operator>=(const char* aString) const;
//PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
void DebugDump(void) const; void DebugDump(void) const;
@ -799,28 +487,14 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( PRUnichar ); void operator=( PRUnichar );
#endif
void AssignWithConversion( char ); void AssignWithConversion( char );
void AssignWithConversion( const char*, PRInt32=-1 ); void AssignWithConversion( const char*, PRInt32=-1 );
void AppendWithConversion( char ); void AppendWithConversion( char );
void InsertWithConversion( char, PRUint32 ); void InsertWithConversion( char, PRUint32 );
}; };
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<char>
operator+( const nsPromiseConcatenation<char>& lhs, const nsCString& rhs )
{
return nsPromiseConcatenation<char>(lhs, rhs);
}
#endif
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char) NS_DEF_STRING_COMPARISON_OPERATORS(nsCString, char)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCString, char);
#endif
extern NS_COM int fputs(const nsCString& aString, FILE* out); extern NS_COM int fputs(const nsCString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsCString& aString); //ostream& operator<<(ostream& aStream,const nsCString& aString);
@ -839,27 +513,20 @@ public:
virtual ~nsCAutoString(); virtual ~nsCAutoString();
nsCAutoString(); nsCAutoString();
nsCAutoString(const nsCString& ); explicit nsCAutoString(const nsCString& );
nsCAutoString(const nsAReadableCString& aString); explicit nsCAutoString(const nsAReadableCString& aString);
nsCAutoString(const char* aString); explicit nsCAutoString(const char* aString);
nsCAutoString(const char* aString,PRInt32 aLength); nsCAutoString(const char* aString,PRInt32 aLength);
nsCAutoString(const CBufDescriptor& aBuffer); explicit nsCAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsCAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
// nsCAutoString(const nsStr& aString);
// nsCAutoString(PRUnichar aChar);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const explicit nsCAutoString(const nsSubsumeCStr& aSubsumeStr); // AIX and VAC++ require a const
#else #else
nsCAutoString(nsSubsumeCStr& aSubsumeStr); explicit nsCAutoString(nsSubsumeCStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; } nsCAutoString& operator=( const nsCAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
public: public:
@ -867,13 +534,6 @@ public:
nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsCAutoString& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsCAutoString& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; } nsCAutoString& operator=( char aChar ) { Assign(aChar); return *this; }
#else
nsCAutoString& operator=(const nsCString& aString) {nsCString::Assign(aString); return *this;}
nsCAutoString& operator=(const char* aCString) {nsCString::Assign(aCString); return *this;}
// nsCAutoString& operator=(const PRUnichar* aString) {nsCString::Assign(aString); return *this;}
// nsCAutoString& operator=(PRUnichar aChar) {nsCString::Assign(aChar); return *this;}
nsCAutoString& operator=(char aChar) {nsCString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -884,14 +544,6 @@ public:
char mBuffer[kDefaultStringSize]; char mBuffer[kDefaultStringSize];
}; };
#if 0//def NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsCAutoString, char)
#endif
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsCAutoString, char)
#endif
/** /**
* A helper class that converts a UCS2 string to UTF8 * A helper class that converts a UCS2 string to UTF8
*/ */
@ -902,6 +554,7 @@ class NS_COM NS_ConvertUCS2toUTF8
*/ */
{ {
public: public:
explicit
NS_ConvertUCS2toUTF8( const PRUnichar* aString ) NS_ConvertUCS2toUTF8( const PRUnichar* aString )
{ {
Append( aString, ~PRUint32(0) /* MAXINT */); Append( aString, ~PRUint32(0) /* MAXINT */);
@ -912,14 +565,13 @@ class NS_COM NS_ConvertUCS2toUTF8
Append( aString, aLength ); Append( aString, aLength );
} }
explicit
NS_ConvertUCS2toUTF8( PRUnichar aChar ) NS_ConvertUCS2toUTF8( PRUnichar aChar )
{ {
Append( &aChar, 1 ); Append( &aChar, 1 );
} }
#ifdef NEW_STRING_APIS explicit NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
NS_ConvertUCS2toUTF8( const nsAReadableString& aString );
#endif
operator const char*() const operator const char*() const
{ {
@ -950,19 +602,17 @@ class NS_COM NS_ConvertUCS2toUTF8
***************************************************************/ ***************************************************************/
class NS_COM nsSubsumeCStr : public nsCString { class NS_COM nsSubsumeCStr : public nsCString {
public: public:
nsSubsumeCStr(nsStr& aString); explicit nsSubsumeCStr(nsStr& aString);
nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeCStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; } nsSubsumeCStr& operator=( const nsSubsumeCStr& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsAReadableCString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeCStr& operator=( const nsPromiseReadable<char>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; } nsSubsumeCStr& operator=( const char* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; } nsSubsumeCStr& operator=( char aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED void operator=( PRUnichar ); // NOT TO BE IMPLEMENTED
#endif
}; };

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -69,25 +67,10 @@ nsString::nsString() {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
} }
#if 0
/**
* This constructor accepts an ascii string
* @update gess 1/4/99
* @param aCString is a ptr to a 1-byte cstr
* @param aLength tells us how many chars to copy from given CString
*/
nsString::nsString(const char* aCString,PRInt32 aCount){
Initialize(*this,eTwoByte);
AssignWithConversion(aCString,aCount);
}
#endif
#ifdef NEW_STRING_APIS
nsString::nsString(const PRUnichar* aString) { nsString::nsString(const PRUnichar* aString) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aString); Assign(aString);
} }
#endif
/** /**
* This constructor accepts a unicode string * This constructor accepts a unicode string
@ -100,18 +83,6 @@ nsString::nsString(const PRUnichar* aString,PRInt32 aCount) {
Assign(aString,aCount); Assign(aString,aCount);
} }
#if 0
/**
* This constructor works for all other nsSTr derivatives
* @update gess 1/4/99
* @param reference to another nsCString
*/
nsString::nsString(const nsStr &aString) {
Initialize(*this,eTwoByte);
StrAssign(*this,aString,0,aString.mLength);
}
#endif
/** /**
* This is our copy constructor * This is our copy constructor
* @update gess 1/4/99 * @update gess 1/4/99
@ -149,7 +120,6 @@ nsString::~nsString() {
nsStr::Destroy(*this); nsStr::Destroy(*this);
} }
#ifdef NEW_STRING_APIS
const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const { const PRUnichar* nsString::GetReadableFragment( nsReadableFragment<PRUnichar>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const {
switch ( aRequest ) { switch ( aRequest ) {
case kFirstFragment: case kFirstFragment:
@ -199,7 +169,6 @@ nsString::nsString( const nsAReadableString& aReadable ) {
Initialize(*this,eTwoByte); Initialize(*this,eTwoByte);
Assign(aReadable); Assign(aReadable);
} }
#endif
void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const { void nsString::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const {
if (aResult) { if (aResult) {
@ -275,36 +244,6 @@ const PRUnichar* nsString::GetUnicode(void) const {
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar nsString::operator[](PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get nth character.
*/
PRUnichar nsString::CharAt(PRUint32 anIndex) const {
return GetCharAt(*this,anIndex);
}
/**
* Get 1st character.
*/
PRUnichar nsString::First(void) const{
return GetCharAt(*this,0);
}
/**
* Get last character.
*/
PRUnichar nsString::Last(void) const{
return GetCharAt(*this,mLength-1);
}
#endif // !defined(NEW_STRING_APIS)
/** /**
* set a char inside this string at given index * set a char inside this string at given index
* @param aChar is the char you want to write into this string * @param aChar is the char you want to write into this string
@ -330,81 +269,6 @@ PRBool nsString::SetCharAt(PRUnichar aChar,PRUint32 anIndex){
append (operator+) METHODS.... append (operator+) METHODS....
*********************************************************/ *********************************************************/
#ifndef NEW_STRING_APIS
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsStr& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* Create a new string by appending given string to this
* @update gess 01/04/99
* @param aString -- 2nd string to be appended
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const nsString& aString){
nsString temp(*this); //make a temp string the same size as this...
nsStr::StrAppend(temp,aString,0,aString.mLength);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aCString is a ptr to cstring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const char* aCString) {
nsString temp(*this);
temp.AppendWithConversion(aCString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a char to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(char aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given buffer.
* @update gess 01/04/99
* @param aString is a ptr to unistring to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(const PRUnichar* aString) {
nsString temp(*this);
temp.Append(aString);
return nsSubsumeStr(temp);
}
/**
* create a new string by adding this to the given char.
* @update gess 01/04/99
* @param aChar is a unichar to be added to this
* @return new subsumeable string (this makes things faster by reducing copying)
*/
nsSubsumeStr nsString::operator+(PRUnichar aChar) {
nsString temp(*this);
temp.Append(char(aChar));
return nsSubsumeStr(temp);
}
#endif // !defined(NEW_STRING_APIS)
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -952,26 +816,6 @@ PRInt32 nsString::ToInteger(PRInt32* anErrorCode,PRUint32 aRadix) const {
*********************************************************************/ *********************************************************************/
#ifndef NEW_STRING_APIS
/**
* assign given nsStr (or derivative) to this one
* @update gess 01/04/99
* @param aString: nsStr to be appended
* @return this
*/
nsString& nsString::Assign(const nsStr& aString,PRInt32 aCount) {
if(this!=&aString){
nsStr::Truncate(*this,0);
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
StrAssign(*this,aString,0,aCount);
}
return *this;
}
#endif
/** /**
* assign given char* to this string * assign given char* to this string
@ -989,33 +833,13 @@ void nsString::AssignWithConversion(const char* aCString,PRInt32 aCount) {
} }
} }
#ifdef NEW_STRING_APIS
void nsString::AssignWithConversion(const char* aCString) { void nsString::AssignWithConversion(const char* aCString) {
nsStr::Truncate(*this,0); nsStr::Truncate(*this,0);
if(aCString){ if(aCString){
AppendWithConversion(aCString); AppendWithConversion(aCString);
} }
} }
#endif
#ifndef NEW_STRING_APIS
/**
* assign given unichar* to this string
* @update gess 01/04/99
* @param aString: buffer to be assigned to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Assign(const PRUnichar* aString,PRInt32 aCount) {
nsStr::Truncate(*this,0);
if(aString){
Append(aString,aCount);
}
return *this;
}
#endif
/** /**
* assign given char to this string * assign given char to this string
@ -1028,39 +852,6 @@ void nsString::AssignWithConversion(char aChar) {
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#ifndef NEW_STRING_APIS
/**
* assign given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be assignd to this
* @return this
*/
nsString& nsString::Assign(PRUnichar aChar) {
nsStr::Truncate(*this,0);
return Append(aChar);
}
#endif
#ifndef NEW_STRING_APIS
/**
* WARNING! THIS IS A VERY SPECIAL METHOD.
* This method "steals" the contents of aSource and hands it to aDest.
* Ordinarily a copy is made, but not in this version.
* @update gess10/30/98
* @param
* @return
*/
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& nsString::operator=(const nsSubsumeStr& aSubsumeString) {
nsSubsumeStr temp(aSubsumeString); // a temp is needed for the AIX and VAC++ compilers
Subsume(*this,temp);
#else
nsString& nsString::operator=(nsSubsumeStr& aSubsumeString) {
Subsume(*this,aSubsumeString);
#endif // AIX || XP_OS2_VACPP
return *this;
}
#endif
/** /**
* append given c-string to this string * append given c-string to this string
@ -1169,96 +960,6 @@ void nsString::AppendFloat(double aFloat){
} }
#ifndef NEW_STRING_APIS
/**
* append given string to this string;
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
#if 0
nsString& nsString::Append(const nsStr& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
#endif
/**
* append given string to this string
* I don't think we need this method now that we have the previous one.
* @update gess 01/04/99
* @param aString : string to be appended to this
* @return this
*/
nsString& nsString::Append(const nsString& aString,PRInt32 aCount) {
if(aCount<0)
aCount=aString.mLength;
else aCount=MinInt(aCount,aString.mLength);
if(0<aCount)
StrAppend(*this,aString,0,aCount);
return *this;
}
/**
* append given unicode string to this
* @update gess 01/04/99
* @param aString : string to be appended to this
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
nsString& nsString::Append(const PRUnichar* aString,PRInt32 aCount) {
if(aString && aCount){ //if astring is null or count==0 there's nothing to do
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount)
StrAppend(*this,temp,0,aCount);
}
return *this;
}
/**
* append given unichar to this string
* @update gess 01/04/99
* @param aChar: char to be appended to this
* @return this
*/
nsString& nsString::Append(PRUnichar aChar) {
PRUnichar buf[2]={0,0};
buf[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=buf;
temp.mLength=1;
StrAppend(*this,temp,0,1);
return *this;
}
#endif
/* /*
* Copies n characters from this left of this string to given string, * Copies n characters from this left of this string to given string,
@ -1349,98 +1050,8 @@ void nsString::InsertWithConversion(const char* aCString,PRUint32 anOffset,PRInt
} }
} }
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @update gess 4/1/98
* @param aString -- source String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* @return this
*/
void nsString::Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount) {
StrInsert(*this,anOffset,aCopy,0,aCount);
}
/**
* Insert a unicode* into this string at a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @param aCount -- length of given buffer or -1 if you want me to compute length.
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return this
*/
void nsString::Insert(const PRUnichar* aString,PRUint32 anOffset,PRInt32 aCount){
if(aString && aCount){
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=(PRUnichar*)aString;
if(0<aCount) {
temp.mLength=aCount;
// If this assertion fires, the caller is probably lying about the length of
// the passed-in string. File a bug on the caller.
#ifdef NS_DEBUG
PRInt32 len=nsStr::FindChar(temp,0,PR_FALSE,0,temp.mLength);
if(kNotFound<len) {
NS_WARNING(kPossibleNull);
}
#endif
}
else aCount=temp.mLength=nsCRT::strlen(aString);
if(0<aCount){
StrInsert(*this,anOffset,temp,0,aCount);
}
}
}
/**
* Insert a single uni-char into this string at
* a specified offset.
*
* @update gess4/22/98
* @param aChar char to be inserted into this string
* @param anOffset is insert pos in str
* @return this
*/
void nsString::Insert(PRUnichar aChar,PRUint32 anOffset){
PRUnichar theBuffer[2]={0,0};
theBuffer[0]=aChar;
nsStr temp;
nsStr::Initialize(temp,eTwoByte);
temp.mUStr=theBuffer;
temp.mLength=1;
StrInsert(*this,anOffset,temp,0,1);
}
#endif
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @update gess 01/04/99
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
#ifndef NEW_STRING_APIS
void nsString::Cut(PRUint32 anOffset, PRInt32 aCount) {
if(0<aCount) {
nsStr::Delete(*this,anOffset,aCount);
}
}
#endif
/********************************************************************** /**********************************************************************
Searching methods... Searching methods...
*********************************************************************/ *********************************************************************/
@ -1823,55 +1434,7 @@ PRInt32 nsString::CompareWithConversion(const PRUnichar* aString,PRBool aIgnoreC
return 0; return 0;
} }
#ifndef NEW_STRING_APIS
/**
* Compare given nsStr with this cstring.
*
* @param aString is an nsStr instance to be compared
* @param aIgnoreCase tells us how to treat case
* @param aCount tells us how many chars to test; -1 implies full length
* @return -1,0,1
*/
PRInt32 nsString::Compare(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
return nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
}
#endif
#ifndef NEW_STRING_APIS
/**
* Here come a whole bunch of operator functions that are self-explanatory...
*/
PRBool nsString::operator==(const nsString& S) const {return Equals(S);}
//PRBool nsString::operator==(const nsStr& S) const {return Equals(S);}
//PRBool nsString::operator==(const char* s) const {return Equals(s);}
PRBool nsString::operator==(const PRUnichar* s) const {return Equals(nsAutoString(s));}
PRBool nsString::operator!=(const nsString& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const nsStr& S) const {return PRBool(Compare(S)!=0);}
//PRBool nsString::operator!=(const char* s) const {return PRBool(Compare(s)!=0);}
PRBool nsString::operator!=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))!=0);}
PRBool nsString::operator<(const nsString& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const nsStr& S) const {return PRBool(Compare(S)<0);}
//PRBool nsString::operator<(const char* s) const {return PRBool(Compare(s)<0);}
PRBool nsString::operator<(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<0);}
PRBool nsString::operator>(const nsString& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const nsStr& S) const {return PRBool(Compare(S)>0);}
//PRBool nsString::operator>(const char* s) const {return PRBool(Compare(s)>0);}
PRBool nsString::operator>(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>0);}
PRBool nsString::operator<=(const nsString& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const nsStr& S) const {return PRBool(Compare(S)<=0);}
//PRBool nsString::operator<=(const char* s) const {return PRBool(Compare(s)<=0);}
PRBool nsString::operator<=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))<=0);}
PRBool nsString::operator>=(const nsString& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const nsStr& S) const {return PRBool(Compare(S)>=0);}
//PRBool nsString::operator>=(const char* s) const {return PRBool(Compare(s)>=0);}
PRBool nsString::operator>=(const PRUnichar* s) const {return PRBool(Compare(nsAutoString(s))>=0);}
#endif // !defined(NEW_STRING_APIS)
PRBool nsString::EqualsIgnoreCase(const nsString& aString) const { PRBool nsString::EqualsIgnoreCase(const nsString& aString) const {
return EqualsWithConversion(aString,PR_TRUE); return EqualsWithConversion(aString,PR_TRUE);
@ -1881,12 +1444,6 @@ PRBool nsString::EqualsIgnoreCase(const char* aString,PRInt32 aLength) const {
return EqualsWithConversion(aString,PR_TRUE,aLength); return EqualsWithConversion(aString,PR_TRUE,aLength);
} }
#ifndef NEW_STRING_APIS
PRBool nsString::EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const {
return Equals(s1,s2,PR_TRUE);
}
#endif
/** /**
* Compare this to given string; note that we compare full strings here. * Compare this to given string; note that we compare full strings here.
* *
@ -1963,40 +1520,6 @@ PRBool nsString::EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const {
return EqualsAtom(aAtom,PR_TRUE); return EqualsAtom(aAtom,PR_TRUE);
} }
#ifndef NEW_STRING_APIS
/**
* Compare this to given string; note that we compare full strings here.
*
* @update gess 01/04/99
* @param aString is the other nsString to be compared to
* @param aCount tells us how many chars to test; -1 implies full length
* @return TRUE if equal
*/
PRBool nsString::Equals(const nsStr& aString,PRBool aIgnoreCase,PRInt32 aCount) const {
PRInt32 theAnswer=nsStr::StrCompare(*this,aString,aCount,aIgnoreCase);
PRBool result=PRBool(0==theAnswer);
return result;
}
/**
* Compare given strings
* @update gess 7/27/98
* @param s1 -- first unichar string to be compared
* @param s2 -- second unichar string to be compared
* @return TRUE if equal
*/
PRBool nsString::Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase) const {
NS_ASSERTION(0!=s1,kNullPointerError);
NS_ASSERTION(0!=s2,kNullPointerError);
PRBool result=PR_FALSE;
if((s1) && (s2)){
PRInt32 cmp=(aIgnoreCase) ? nsCRT::strcasecmp(s1,s2) : nsCRT::strcmp(s1,s2);
result=PRBool(0==cmp);
}
return result;
}
#endif
/** /**
* Determine if given char in valid alpha range * Determine if given char in valid alpha range
@ -2321,21 +1844,6 @@ NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( char aChar )
AppendWithConversion(aChar); AppendWithConversion(aChar);
} }
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsAReadableCString& )
{
// ...
}
#else
NS_ConvertASCIItoUCS2::NS_ConvertASCIItoUCS2( const nsCString& )
{
// ...
}
#endif
#endif
void void
NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength ) NS_ConvertUTF8toUCS2::Init( const char* aCString, PRUint32 aLength )
{ {

View File

@ -17,10 +17,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All * Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved. * Rights Reserved.
* *
* Original Author:
* Rick Gessner <rickg@netscape.com>
*
* Contributor(s): * Contributor(s):
* Rick Gessner <rickg@netscape.com> (original author)
* Scott Collins <scc@mozilla.org> * Scott Collins <scc@mozilla.org>
*/ */
@ -39,16 +37,6 @@
4. Subsumable strings 4. Subsumable strings
***********************************************************************/ ***********************************************************************/
#ifndef NEW_STRING_APIS
#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
// Need this to enable comparison profiling for a while
#ifdef OLD_STRING_APIS
#undef NEW_STRING_APIS
#endif
#ifndef _nsString_ #ifndef _nsString_
#define _nsString_ #define _nsString_
@ -60,9 +48,7 @@
#include "nsStr.h" #include "nsStr.h"
#include "nsCRT.h" #include "nsCRT.h"
#ifdef NEW_STRING_APIS
#include "nsAWritableString.h" #include "nsAWritableString.h"
#endif
#ifdef STANDALONE_MI_STRING_TESTS #ifdef STANDALONE_MI_STRING_TESTS
class nsAReadableString { public: virtual ~nsAReadableString() { } }; class nsAReadableString { public: virtual ~nsAReadableString() { } };
@ -78,17 +64,13 @@ class nsISizeOfHandler;
class NS_COM nsSubsumeStr; class NS_COM nsSubsumeStr;
class NS_COM nsString : class NS_COM nsString :
#if defined(NEW_STRING_APIS) || defined(STANDALONE_MI_STRING_TESTS)
public nsAWritableString, public nsAWritableString,
#endif
public nsStr { public nsStr {
#ifdef NEW_STRING_APIS
protected: protected:
virtual const void* Implementation() const { return "nsString"; } virtual const void* Implementation() const { return "nsString"; }
virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const; virtual const PRUnichar* GetReadableFragment( nsReadableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ) const;
virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 ); virtual PRUnichar* GetWritableFragment( nsWritableFragment<PRUnichar>&, nsFragmentRequest, PRUint32 );
#endif
public: public:
@ -103,30 +85,10 @@ public:
*/ */
nsString(const nsString& aString); nsString(const nsString& aString);
#ifdef NEW_STRING_APIS
explicit nsString(const nsAReadableString&); explicit nsString(const nsAReadableString&);
nsString(const PRUnichar*); explicit nsString(const PRUnichar*);
nsString(const PRUnichar*, PRInt32); nsString(const PRUnichar*, PRInt32);
#else
/**
* This constructor accepts a unichar string
* @param aCString is a ptr to a 2-byte cstr
*/
nsString(const PRUnichar* aString,PRInt32 aCount=-1);
/**
* This constructor accepts an isolatin string
* @param aCString is a ptr to a 1-byte cstr
*/
//nsString(const char* aCString,PRInt32 aCount=-1);
/**
* This is a copy constructor that accepts an nsStr
* @param reference to another nsString
*/
//nsString(const nsStr&);
#endif
/** /**
@ -134,9 +96,9 @@ public:
* @param reference to subsumestr * @param reference to subsumestr
*/ */
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here explicit nsString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ require a const here
#else #else
nsString(nsSubsumeStr& aSubsumeStr); explicit nsString(nsSubsumeStr& aSubsumeStr);
#endif #endif
/** /**
@ -198,17 +160,6 @@ public:
return result; return result;
} }
#ifndef NEW_STRING_APIS
/**
* Determine whether or not this string has a length of 0
*
* @return TRUE if empty.
*/
PRBool IsEmpty(void) const {
return PRBool(0==mLength);
}
#endif
/********************************************************************** /**********************************************************************
Getters/Setters... Getters/Setters...
*********************************************************************/ *********************************************************************/
@ -219,63 +170,12 @@ public:
const char* GetBuffer(void) const; const char* GetBuffer(void) const;
const PRUnichar* GetUnicode(void) const; const PRUnichar* GetUnicode(void) const;
#ifndef NEW_STRING_APIS
/**
* Get nth character.
*/
PRUnichar operator[](PRUint32 anIndex) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PRUnichar First(void) const;
PRUnichar Last(void) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Set nth character. * Set nth character.
*/ */
PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex); PRBool SetCharAt(PRUnichar aChar,PRUint32 anIndex);
#ifndef NEW_STRING_APIS
/**********************************************************************
String concatenation methods...
*********************************************************************/
/**
* Create a new string by appending given string to this
* @param aString -- 2nd string to be appended
* @return new subsumable string
*/
nsSubsumeStr operator+(const nsStr& aString);
nsSubsumeStr operator+(const nsString& aString);
/**
* create a new string by adding this to the given cstring
* @param aCString is a ptr to cstring to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const char* aCString);
/**
* create a new string by adding this to the given prunichar*.
* @param aString is a ptr to UC-string to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(const PRUnichar* aString);
/**
* create a new string by adding this to the given char.
* @param aChar is a char to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(char aChar);
/**
* create a new string by adding this to the given char.
* @param aChar is a unichar to be added to this
* @return newly created string
*/
nsSubsumeStr operator+(PRUnichar aChar);
#endif
/********************************************************************** /**********************************************************************
Lexomorphic transforms... Lexomorphic transforms...
@ -449,47 +349,14 @@ public:
*/ */
nsString& operator=( const nsString& aString ) { Assign(aString); return *this; } nsString& operator=( const nsString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#endif
void AssignWithConversion(char); void AssignWithConversion(char);
#ifdef NEW_STRING_APIS
void AssignWithConversion(const char*); void AssignWithConversion(const char*);
void AssignWithConversion(const char*, PRInt32); void AssignWithConversion(const char*, PRInt32);
#else
void AssignWithConversion(const char*, PRInt32=-1);
nsString& Assign(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Assign(PRUnichar aChar);
nsString& Assign(const nsStr& aString,PRInt32 aCount=-1);
//nsString& Assign(const char* aString,PRInt32 aCount=-1) { AssignWithConversion(aString, aCount); return *this; }
//nsString& Assign(char aChar) { AssignWithConversion(aChar); return *this; }
/**
* here come a bunch of assignment operators...
* @param aString: string to be added to this
* @return this
*/
nsString& operator=(PRUnichar aChar) {Assign(aChar); return *this;}
//nsString& operator=(char aChar) {AssignWithConversion(aChar); return *this;}
//nsString& operator=(const char* aCString) {AssignWithConversion(aCString); return *this;}
//nsString& operator=(const nsStr& aString) {return Assign(aString);}
nsString& operator=(const PRUnichar* aString) {return Assign(aString);}
// Yes, I know this makes assignment from a |nsSubsumeString| not do the special thing
// |nsSubsumeString| needs to go away
#if defined(AIX) || defined(XP_OS2_VACPP)
nsString& operator=(const nsSubsumeStr& aSubsumeString); // AIX and VAC++ requires a const here
#else
nsString& operator=(nsSubsumeStr& aSubsumeString);
#endif
#endif
/* /*
@ -507,42 +374,6 @@ public:
virtual void do_AppendFromElement( PRUnichar ); virtual void do_AppendFromElement( PRUnichar );
#ifndef NEW_STRING_APIS
/*
* Appends n characters from given string to this,
*
* @param aString is the source to be appended to this
* @param aCount -- number of chars to copy; -1 tells us to compute the strlen for you
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
* @return number of chars copied
*/
//nsString& Append(const nsStr& aString,PRInt32 aCount);
//nsString& Append(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const nsString& aString,PRInt32 aCount);
nsString& Append(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& Append(const PRUnichar* aString,PRInt32 aCount=-1);
nsString& Append(PRUnichar aChar);
//nsString& Append(const char* aString,PRInt32 aCount=-1) { AppendWithConversion(aString,aCount); return *this; }
//nsString& Append(char aChar) { AppendWithConversion(aChar); return *this; }
//nsString& Append(PRInt32 aInteger,PRInt32 aRadix=10) { AppendInt(aInteger,aRadix); return *this; }
//nsString& Append(float aFloat) { AppendFloat(aFloat); return *this; }
/**
* Here's a bunch of methods that append varying types...
* @param various...
* @return this
*/
//nsString& operator+=(const char* aCString) {return Append(aCString);}
//nsString& operator+=(const char aChar) {return Append((PRUnichar) (unsigned char)aChar);}
nsString& operator+=(const PRUnichar aChar) {return Append(aChar);}
//nsString& operator+=(const int anInt) {return Append(anInt,10);}
//nsString& operator+=(const nsStr& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const nsString& aString) {return Append(aString,(PRInt32)aString.mLength);}
nsString& operator+=(const PRUnichar* aUCString) {return Append(aUCString);}
#endif
/* /*
* Copies n characters from this string to given string, * Copies n characters from this string to given string,
@ -581,55 +412,6 @@ public:
//void InsertWithConversion(char); //void InsertWithConversion(char);
void InsertWithConversion(const char*, PRUint32, PRInt32=-1); void InsertWithConversion(const char*, PRUint32, PRInt32=-1);
#ifndef NEW_STRING_APIS
/*
* This method inserts n chars from given string into this
* string at str[anOffset].
*
* @param aCopy -- String to be inserted into this
* @param anOffset -- insertion position within this str
* @param aCount -- number of chars to be copied from aCopy
* NOTE: IFF you pass -1 as aCount, then your buffer must be null terminated.
*
* @return number of chars inserted into this.
*/
void Insert(const nsString& aCopy,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a given string into this string at
* a specified offset.
*
* @param aString* to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(const char* aChar,PRUint32 anOffset,PRInt32 aCount=-1) {InsertWithConversion(aChar, anOffset, aCount); return *this;}
void Insert(const PRUnichar* aChar,PRUint32 anOffset,PRInt32 aCount=-1);
/**
* Insert a single char into this string at
* a specified offset.
*
* @param character to be inserted into this string
* @param anOffset is insert pos in str
* @return the number of chars inserted into this string
*/
//nsString& Insert(char aChar,PRUint32 anOffset) {InsertWithConversion(aChar,anOffset); return *this;}
void Insert(PRUnichar aChar,PRUint32 anOffset);
#endif
#ifndef NEW_STRING_APIS
/*
* This method is used to cut characters in this string
* starting at anOffset, continuing for aCount chars.
*
* @param anOffset -- start pos for cut operation
* @param aCount -- number of chars to be cut
* @return *this
*/
void Cut(PRUint32 anOffset,PRInt32 aCount);
#endif
/********************************************************************** /**********************************************************************
@ -739,110 +521,6 @@ public:
PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const; PRBool EqualsIgnoreCase(/*FIX: const */nsIAtom *aAtom) const;
#ifndef NEW_STRING_APIS
//virtual PRInt32 Compare(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
//virtual PRInt32 Compare(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return CompareWithConversion(aString,aIgnoreCase,aCount);
//}
virtual PRInt32 Compare(const nsStr &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
/**
* Compare this to given string; note that we compare full strings here.
* The optional length argument just lets us know how long the given string is.
* If you provide a length, it is compared to length of this string as an
* optimization.
*
* @param aString -- the string to compare to this
* @param aCount -- number of chars to be compared.
* @return TRUE if equal
*/
PRBool Equals(const nsString &aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
// return EqualsWithConversion(aString,aIgnoreCase,aCount);
//}
PRBool Equals(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const {
return EqualsWithConversion(aString,aIgnoreCase,aCount);
}
//PRBool Equals(/*FIX: const */nsIAtom* anAtom,PRBool aIgnoreCase) const { return EqualsAtom(anAtom, aIgnoreCase); }
PRBool Equals(const PRUnichar* s1, const PRUnichar* s2,PRBool aIgnoreCase=PR_FALSE) const;
PRBool Equals(const nsStr& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const;
PRBool EqualsIgnoreCase(const PRUnichar* s1, const PRUnichar* s2) const;
/**
* These methods compare a given string type to this one
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator==(const nsString &aString) const;
//PRBool operator==(const nsStr &aString) const;
//PRBool operator==(const char *aString) const;
PRBool operator==(const PRUnichar* aString) const;
/**
* These methods perform a !compare of a given string type to this
* @param aString is the string to be compared to this
* @return TRUE
*/
PRBool operator!=(const nsString &aString) const;
//PRBool operator!=(const nsStr &aString) const;
//PRBool operator!=(const char* aString) const;
PRBool operator!=(const PRUnichar* aString) const;
/**
* These methods test if a given string is < than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<(const nsString &aString) const;
//PRBool operator<(const nsStr &aString) const;
//PRBool operator<(const char* aString) const;
PRBool operator<(const PRUnichar* aString) const;
/**
* These methods test if a given string is > than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>(const nsString &aString) const;
//PRBool operator>(const nsStr &S) const;
//PRBool operator>(const char* aString) const;
PRBool operator>(const PRUnichar* aString) const;
/**
* These methods test if a given string is <= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator<=(const nsString &aString) const;
//PRBool operator<=(const nsStr &S) const;
//PRBool operator<=(const char* aString) const;
PRBool operator<=(const PRUnichar* aString) const;
/**
* These methods test if a given string is >= than this
* @param aString is the string to be compared to this
* @return TRUE or FALSE
*/
PRBool operator>=(const nsString &aString) const;
//PRBool operator>=(const nsStr &S) const;
//PRBool operator>=(const char* aString) const;
PRBool operator>=(const PRUnichar* aString) const;
#endif // !defined(NEW_STRING_APIS)
/** /**
* Determine if given buffer is plain ascii * Determine if given buffer is plain ascii
@ -884,9 +562,7 @@ public:
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
// these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion // these signatures help clients not accidentally call the wrong thing helped by C++ automatic integral promotion
#ifdef NEW_STRING_APIS
void operator=( char ); void operator=( char );
#endif
void AssignWithConversion( PRUnichar ); void AssignWithConversion( PRUnichar );
void AssignWithConversion( const PRUnichar*, PRInt32=-1 ); void AssignWithConversion( const PRUnichar*, PRInt32=-1 );
void AppendWithConversion( PRUnichar ); void AppendWithConversion( PRUnichar );
@ -894,19 +570,7 @@ private:
void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 ); void InsertWithConversion( const PRUnichar*, PRUint32, PRInt32=-1 );
}; };
#ifdef NEW_STRING_APIS
NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar) NS_DEF_STRING_COMPARISON_OPERATORS(nsString, PRUnichar)
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsString, PRUnichar)
#endif
#if 0 // #ifdef NEW_STRING_APIS
inline
nsPromiseConcatenation<PRUnichar>
operator+( const nsPromiseConcatenation<PRUnichar>& lhs, const nsString& rhs )
{
return nsPromiseConcatenation<PRUnichar>(lhs, rhs);
}
#endif
extern NS_COM int fputs(const nsString& aString, FILE* out); extern NS_COM int fputs(const nsString& aString, FILE* out);
//ostream& operator<<(ostream& aStream,const nsString& aString); //ostream& operator<<(ostream& aStream,const nsString& aString);
@ -924,27 +588,21 @@ public:
virtual ~nsAutoString(); virtual ~nsAutoString();
nsAutoString(); nsAutoString();
nsAutoString(const nsAutoString& aString); nsAutoString(const nsAutoString& aString);
nsAutoString(const nsAReadableString& aString); explicit nsAutoString(const nsAReadableString& aString);
nsAutoString(const nsString& aString); explicit nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString); explicit nsAutoString(const PRUnichar* aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength); nsAutoString(const PRUnichar* aString,PRInt32 aLength);
nsAutoString(PRUnichar aChar); explicit nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer); explicit nsAutoString(const CBufDescriptor& aBuffer);
#ifndef NEW_STRING_APIS
// nsAutoString(const char* aCString,PRInt32 aLength=-1);
// nsAutoString(const nsStr& aString);
#endif
#if defined(AIX) || defined(XP_OS2_VACPP) #if defined(AIX) || defined(XP_OS2_VACPP)
nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const explicit nsAutoString(const nsSubsumeStr& aSubsumeStr); // AIX and VAC++ requires a const
#else #else
nsAutoString(nsSubsumeStr& aSubsumeStr); explicit nsAutoString(nsSubsumeStr& aSubsumeStr);
#endif // AIX || XP_OS2_VACPP #endif // AIX || XP_OS2_VACPP
nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; } nsAutoString& operator=( const nsAutoString& aString ) { Assign(aString); return *this; }
#ifdef NEW_STRING_APIS
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
public: public:
@ -952,13 +610,6 @@ public:
nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsAutoString& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsAutoString& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsAutoString& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
#else
nsAutoString& operator=(const nsStr& aString) {nsString::Assign(aString); return *this;}
// nsAutoString& operator=(const char* aCString) {nsString::Assign(aCString); return *this;}
// nsAutoString& operator=(char aChar) {nsString::Assign(aChar); return *this;}
nsAutoString& operator=(const PRUnichar* aBuffer) {nsString::Assign(aBuffer); return *this;}
nsAutoString& operator=(PRUnichar aChar) {nsString::Assign(aChar); return *this;}
#endif
/** /**
* Retrieve the size of this string * Retrieve the size of this string
@ -969,10 +620,6 @@ public:
char mBuffer[kDefaultStringSize<<eTwoByte]; char mBuffer[kDefaultStringSize<<eTwoByte];
}; };
#ifdef NEW_STRING_APIS
NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsAutoString, PRUnichar)
#endif
class NS_COM NS_ConvertASCIItoUCS2 class NS_COM NS_ConvertASCIItoUCS2
: public nsAutoString : public nsAutoString
/* /*
@ -980,19 +627,10 @@ class NS_COM NS_ConvertASCIItoUCS2
*/ */
{ {
public: public:
NS_ConvertASCIItoUCS2( const char* ); explicit NS_ConvertASCIItoUCS2( const char* );
NS_ConvertASCIItoUCS2( const char*, PRUint32 ); NS_ConvertASCIItoUCS2( const char*, PRUint32 );
NS_ConvertASCIItoUCS2( char ); explicit NS_ConvertASCIItoUCS2( char );
#if 0
#ifdef NEW_STRING_APIS
NS_ConvertASCIItoUCS2( const nsAReadableCString& );
#else
class nsCString;
NS_ConvertASCIItoUCS2( const nsCString& );
#endif
#endif
#ifdef NEW_STRING_APIS
operator const PRUnichar*() const operator const PRUnichar*() const
{ {
return GetUnicode(); return GetUnicode();
@ -1002,7 +640,6 @@ class NS_COM NS_ConvertASCIItoUCS2
{ {
return nsLiteralString(mUStr, mLength); return nsLiteralString(mUStr, mLength);
} }
#endif
private: private:
// NOT TO BE IMPLEMENTED // NOT TO BE IMPLEMENTED
@ -1036,6 +673,7 @@ class NS_COM NS_ConvertUTF8toUCS2
: public nsAutoString : public nsAutoString
{ {
public: public:
explicit
NS_ConvertUTF8toUCS2( const char* aCString ) NS_ConvertUTF8toUCS2( const char* aCString )
{ {
Init( aCString, ~PRUint32(0) /* MAXINT */ ); Init( aCString, ~PRUint32(0) /* MAXINT */ );
@ -1046,6 +684,7 @@ class NS_COM NS_ConvertUTF8toUCS2
Init( aCString, aLength ); Init( aCString, aLength );
} }
explicit
NS_ConvertUTF8toUCS2( char aChar ) NS_ConvertUTF8toUCS2( char aChar )
{ {
Init( &aChar, 1 ); Init( &aChar, 1 );
@ -1079,20 +718,18 @@ class NS_COM NS_ConvertUTF8toUCS2
class NS_COM nsSubsumeStr : public nsString { class NS_COM nsSubsumeStr : public nsString {
public: public:
nsSubsumeStr(); nsSubsumeStr();
nsSubsumeStr(nsStr& aString); explicit nsSubsumeStr(nsStr& aString);
nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1); nsSubsumeStr(char* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1); int Subsume(PRUnichar* aString,PRBool assumeOwnership,PRInt32 aLength=-1);
nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsSubsumeStr& aReadable ) { Assign(aReadable); return *this; }
#ifdef NEW_STRING_APIS
nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsAReadableString& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; } nsSubsumeStr& operator=( const nsPromiseReadable<PRUnichar>& aReadable ) { Assign(aReadable); return *this; }
nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; } nsSubsumeStr& operator=( const PRUnichar* aPtr ) { Assign(aPtr); return *this; }
nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; } nsSubsumeStr& operator=( PRUnichar aChar ) { Assign(aChar); return *this; }
private: private:
void operator=( char ); // NOT TO BE IMPLEMENTED void operator=( char ); // NOT TO BE IMPLEMENTED
#endif
}; };