This commit is contained in:
mjudge%netscape.com 2000-04-26 00:55:37 +00:00
Родитель 0b240f10f7
Коммит 47511cf02b
22 изменённых файлов: 330 добавлений и 21 удалений

Просмотреть файл

@ -34,6 +34,9 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsCString_
#define _nsCString_

Просмотреть файл

@ -2286,6 +2286,15 @@ nsAutoString::nsAutoString(const PRUnichar* aString,PRInt32 aLength) : nsString(
Append(aString,aLength);
}
nsAutoString::nsAutoString( const nsString& aString )
: nsString()
{
Initialize(*this, mBuffer, (sizeof(mBuffer)>>eTwoByte)-1, 0, eTwoByte, PR_FALSE);
AddNullTerminator(*this);
Append(aString);
}
/**
* constructor that uses external buffer
* @param aBuffer describes the external buffer

Просмотреть файл

@ -35,6 +35,10 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsString_
#define _nsString_
@ -898,6 +902,7 @@ public:
virtual ~nsAutoString();
nsAutoString();
nsAutoString(const nsAutoString& aString);
nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer);

Просмотреть файл

@ -504,7 +504,7 @@ template <class CharT>
PRUint32
basic_nsAReadableString<CharT>::CountChar( CharT c ) const
{
#if 1
#if 0
return PRUint32(count(BeginReading(), EndReading(), c));
#else
PRUint32 result = 0;
@ -679,7 +679,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs)));
}
template <class CharT>
@ -687,7 +687,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs, PRUint32 rhs_length ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs, rhs_length)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs, rhs_length)));
}

Просмотреть файл

@ -487,6 +487,8 @@ struct nsCharSourceTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSourceTraits<CharT*>
{
@ -513,6 +515,37 @@ struct nsCharSourceTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSourceTraits<const char*>
{
static
PRUint32
readable_size( const char* s )
{
return PRUint32(nsCharTraits<char>::length(s));
// return numeric_limits<PRUint32>::max();
}
static
PRUint32
readable_size( const char* first, const char* last )
{
return PRUint32(last-first);
}
static
const char*
read( const char* s )
{
return s;
}
};
// Add specialization for |PRUnichar| only if it is needed
#endif
template <class OutputIterator>
@ -526,6 +559,8 @@ struct nsCharSinkTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSinkTraits<CharT*>
{
@ -539,5 +574,34 @@ struct nsCharSinkTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<char*>
{
static
PRUint32
write( char*& iter, const char* s, PRUint32 n )
{
nsCharTraits<char>::copy(iter, s, n);
iter += n;
return n;
}
};
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<PRUnichar*>
{
static
PRUint32
write( PRUnichar*& iter, const PRUnichar* s, PRUint32 n )
{
nsCharTraits<PRUnichar>::copy(iter, s, n);
iter += n;
return n;
}
};
#endif
#endif // !defined(_nsCharTraits_h__)

Просмотреть файл

@ -162,6 +162,7 @@ typedef PRUint16 PRUnichar;
/* under Metrowerks (Mac), we don't have autoconf yet */
#ifdef __MWERKS__
#define HAVE_CPP_SPECIALIZATION
#define HAVE_CPP_PARTIAL_SPECIALIZATION
#define HAVE_CPP_MODERN_SPECIALIZE_TEMPLATE_SYNTAX
#define HAVE_ACCESS_CHANGING_CPP_USING

Просмотреть файл

@ -504,7 +504,7 @@ template <class CharT>
PRUint32
basic_nsAReadableString<CharT>::CountChar( CharT c ) const
{
#if 1
#if 0
return PRUint32(count(BeginReading(), EndReading(), c));
#else
PRUint32 result = 0;
@ -679,7 +679,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs)));
}
template <class CharT>
@ -687,7 +687,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs, PRUint32 rhs_length ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs, rhs_length)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs, rhs_length)));
}

Просмотреть файл

@ -487,6 +487,8 @@ struct nsCharSourceTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSourceTraits<CharT*>
{
@ -513,6 +515,37 @@ struct nsCharSourceTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSourceTraits<const char*>
{
static
PRUint32
readable_size( const char* s )
{
return PRUint32(nsCharTraits<char>::length(s));
// return numeric_limits<PRUint32>::max();
}
static
PRUint32
readable_size( const char* first, const char* last )
{
return PRUint32(last-first);
}
static
const char*
read( const char* s )
{
return s;
}
};
// Add specialization for |PRUnichar| only if it is needed
#endif
template <class OutputIterator>
@ -526,6 +559,8 @@ struct nsCharSinkTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSinkTraits<CharT*>
{
@ -539,5 +574,34 @@ struct nsCharSinkTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<char*>
{
static
PRUint32
write( char*& iter, const char* s, PRUint32 n )
{
nsCharTraits<char>::copy(iter, s, n);
iter += n;
return n;
}
};
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<PRUnichar*>
{
static
PRUint32
write( PRUnichar*& iter, const PRUnichar* s, PRUint32 n )
{
nsCharTraits<PRUnichar>::copy(iter, s, n);
iter += n;
return n;
}
};
#endif
#endif // !defined(_nsCharTraits_h__)

Просмотреть файл

@ -34,6 +34,9 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsCString_
#define _nsCString_

Просмотреть файл

@ -2286,6 +2286,15 @@ nsAutoString::nsAutoString(const PRUnichar* aString,PRInt32 aLength) : nsString(
Append(aString,aLength);
}
nsAutoString::nsAutoString( const nsString& aString )
: nsString()
{
Initialize(*this, mBuffer, (sizeof(mBuffer)>>eTwoByte)-1, 0, eTwoByte, PR_FALSE);
AddNullTerminator(*this);
Append(aString);
}
/**
* constructor that uses external buffer
* @param aBuffer describes the external buffer

Просмотреть файл

@ -35,6 +35,10 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsString_
#define _nsString_
@ -898,6 +902,7 @@ public:
virtual ~nsAutoString();
nsAutoString();
nsAutoString(const nsAutoString& aString);
nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer);

Просмотреть файл

@ -34,6 +34,9 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsCString_
#define _nsCString_

Просмотреть файл

@ -2286,6 +2286,15 @@ nsAutoString::nsAutoString(const PRUnichar* aString,PRInt32 aLength) : nsString(
Append(aString,aLength);
}
nsAutoString::nsAutoString( const nsString& aString )
: nsString()
{
Initialize(*this, mBuffer, (sizeof(mBuffer)>>eTwoByte)-1, 0, eTwoByte, PR_FALSE);
AddNullTerminator(*this);
Append(aString);
}
/**
* constructor that uses external buffer
* @param aBuffer describes the external buffer

Просмотреть файл

@ -35,6 +35,10 @@
4. Subsumable strings
***********************************************************************/
#ifndef NEW_STRING_APIS
//#define NEW_STRING_APIS 1
#endif //NEW_STRING_APIS
#ifndef _nsString_
#define _nsString_
@ -898,6 +902,7 @@ public:
virtual ~nsAutoString();
nsAutoString();
nsAutoString(const nsAutoString& aString);
nsAutoString(const nsString& aString);
nsAutoString(const PRUnichar* aString,PRInt32 aLength=-1);
nsAutoString(PRUnichar aChar);
nsAutoString(const CBufDescriptor& aBuffer);

Просмотреть файл

@ -504,7 +504,7 @@ template <class CharT>
PRUint32
basic_nsAReadableString<CharT>::CountChar( CharT c ) const
{
#if 1
#if 0
return PRUint32(count(BeginReading(), EndReading(), c));
#else
PRUint32 result = 0;
@ -679,7 +679,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs)));
}
template <class CharT>
@ -687,7 +687,7 @@ inline
int
basic_nsAReadableString<CharT>::Compare( const CharT* rhs, PRUint32 rhs_length ) const
{
return ::Compare(*this, NS_STATIC_CAST(basic_nsAReadableString<CharT>, basic_nsLiteralString<CharT>(rhs, rhs_length)));
return ::Compare(*this, NS_STATIC_CAST(const basic_nsAReadableString<CharT>&, basic_nsLiteralString<CharT>(rhs, rhs_length)));
}

Просмотреть файл

@ -487,6 +487,8 @@ struct nsCharSourceTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSourceTraits<CharT*>
{
@ -513,6 +515,37 @@ struct nsCharSourceTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSourceTraits<const char*>
{
static
PRUint32
readable_size( const char* s )
{
return PRUint32(nsCharTraits<char>::length(s));
// return numeric_limits<PRUint32>::max();
}
static
PRUint32
readable_size( const char* first, const char* last )
{
return PRUint32(last-first);
}
static
const char*
read( const char* s )
{
return s;
}
};
// Add specialization for |PRUnichar| only if it is needed
#endif
template <class OutputIterator>
@ -526,6 +559,8 @@ struct nsCharSinkTraits
}
};
#ifdef HAVE_CPP_PARTIAL_SPECIALIZATION
template <class CharT>
struct nsCharSinkTraits<CharT*>
{
@ -539,5 +574,34 @@ struct nsCharSinkTraits<CharT*>
}
};
#else
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<char*>
{
static
PRUint32
write( char*& iter, const char* s, PRUint32 n )
{
nsCharTraits<char>::copy(iter, s, n);
iter += n;
return n;
}
};
NS_SPECIALIZE_TEMPLATE
struct nsCharSinkTraits<PRUnichar*>
{
static
PRUint32
write( PRUnichar*& iter, const PRUnichar* s, PRUint32 n )
{
nsCharTraits<PRUnichar>::copy(iter, s, n);
iter += n;
return n;
}
};
#endif
#endif // !defined(_nsCharTraits_h__)

Просмотреть файл

@ -136,8 +136,8 @@ main(int argc, char* argv[])
char name[16];
name[0] = 0;
sprintf(name, "%d", i);
nsAutoString v("");
ret = props->GetStringProperty(name, v);
nsAutoString v;
ret = props->GetStringProperty(NS_ConvertASCIItoUCS2(name), v);
if (NS_FAILED(ret) || (!v.Length())) {
break;
}

Просмотреть файл

@ -0,0 +1,64 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..
MAKE_OBJ_TYPE = EXE
PROGRAM = .\$(OBJDIR)\test_main.exe
OBJS = \
.\$(OBJDIR)\test_main.obj \
.\$(OBJDIR)\nsString2.obj \
.\$(OBJDIR)\nsStr.obj \
.\$(OBJDIR)\nsString.obj \
.\$(OBJDIR)\nsCRT.obj \
.\$(OBJDIR)\nsAllocator.obj \
.\$(OBJDIR)\nsDeque.obj \
$(NULL)
CPPSRCS = \
test_main.cpp \
$(DEPTH)\xpcom\nsString2.cpp \
$(DEPTH)\xpcom\ds\nsStr.cpp \
$(DEPTH)\xpcom\ds\nsString.cpp \
$(DEPTH)\xpcom\ds\nsCRT.cpp \
$(DEPTH)\xpcom\ds\nsAllocator.cpp \
$(DEPTH)\xpcom\ds\nsDeque.cpp \
$(NULL)
LCFLAGS = \
-DNEW_STRING_APIS -DSTANDALONE_STRING_TESTS -DNDEBUG -GX\
$(DEFINES) \
$(NULL)
LINCS=-I$(PUBLIC)\xpcom \
-I$(MOZ_TOOLS)\include \
$(NULL)
include <$(DEPTH)\config\rules.mak>
export:: $(PROGRAM)
$(MAKE_INSTALL) $(PROGRAM) $(DIST)\bin
clobber::
rm -f $(DIST)\bin\test_main.exe
$(PROGRAM):: $(OBJS) $(MYLIBS)

Просмотреть файл

@ -1,6 +1,6 @@
#include <iostream.h>
#define TEST_STD_STRING
//#define TEST_STD_STRING
#include "nsString.h"

Просмотреть файл

@ -47,7 +47,8 @@ int main(int argc, char** argv)
if (nsnull == s) {
break;
}
nsAutoString sb(buf);
nsAutoString sb;
sb.AssignWithConversion(buf);
strings[count++] = sb.ToNewUnicode();
sb.ToUpperCase();
strings[count++] = sb.ToNewUnicode();

Двоичные данные
xpcom/tests/TestCRT.cpp

Двоичный файл не отображается.

Просмотреть файл

@ -51,7 +51,7 @@ extern ostream &operator<<( ostream &s, nsString &str ) {
class TestObserver : public nsIObserver, public nsSupportsWeakReference {
public:
TestObserver( const nsString &name = "unknown" )
TestObserver( const nsString &name = NS_ConvertASCIItoUCS2("unknown") )
: mName( name ) {
NS_INIT_REFCNT();
}
@ -82,8 +82,8 @@ TestObserver::Observe( nsISupports *aSubject,
int main(int argc, char *argv[])
{
nsString topicA( "topic-A" );
nsString topicB( "topic-B" );
nsString topicA; topicA.AssignWithConversion( "topic-A" );
nsString topicB; topicB.AssignWithConversion( "topic-B" );
nsresult rv;
nsresult res = nsComponentManager::CreateInstance(NS_OBSERVERSERVICE_PROGID,
@ -94,9 +94,9 @@ int main(int argc, char *argv[])
if (res == NS_OK) {
nsIObserver *anObserver;
nsIObserver *aObserver = new TestObserver("Observer-A");
nsIObserver *aObserver = new TestObserver(NS_ConvertASCIItoUCS2("Observer-A"));
aObserver->AddRef();
nsIObserver *bObserver = new TestObserver("Observer-B");
nsIObserver *bObserver = new TestObserver(NS_ConvertASCIItoUCS2("Observer-B"));
bObserver->AddRef();
cout << "Adding Observer-A as observer of topic-A..." << endl;
@ -114,13 +114,13 @@ int main(int argc, char *argv[])
cout << "Testing Notify(observer-A, topic-A)..." << endl;
rv = anObserverService->Notify( aObserver,
topicA.GetUnicode(),
nsString("Testing Notify(observer-A, topic-A)").GetUnicode() );
NS_ConvertASCIItoUCS2("Testing Notify(observer-A, topic-A)").GetUnicode() );
testResult(rv);
cout << "Testing Notify(observer-B, topic-B)..." << endl;
rv = anObserverService->Notify( bObserver,
topicB.GetUnicode(),
nsString("Testing Notify(observer-B, topic-B)").GetUnicode() );
NS_ConvertASCIItoUCS2("Testing Notify(observer-B, topic-B)").GetUnicode() );
testResult(rv);
cout << "Testing EnumerateObserverList (for topic-A)..." << endl;
@ -138,7 +138,7 @@ int main(int argc, char *argv[])
rv = inst->QueryInterface(NS_GET_IID(nsIObserver),(void**)&anObserver);
cout << "Calling observe on enumerated observer "
<< NS_REINTERPRET_CAST(TestObserver*, NS_REINTERPRET_CAST(void*, inst))->mName << "..." << endl;
rv = anObserver->Observe( inst, topicA.GetUnicode(), nsString("during enumeration").GetUnicode() );
rv = anObserver->Observe( inst, topicA.GetUnicode(), NS_ConvertASCIItoUCS2("during enumeration").GetUnicode() );
testResult(rv);
}
}