From 9e02d75620b01989d99b2257fbc520d0bd2b0f80 Mon Sep 17 00:00:00 2001 From: "scc%mozilla.org" Date: Wed, 14 Jun 2000 04:10:00 +0000 Subject: [PATCH] Adding a new string class for to help fix performance problems. --- xpcom/ds/nsWorkString.cpp | 52 +++++++++++++++++++++++++++++ xpcom/ds/nsWorkString.h | 70 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100755 xpcom/ds/nsWorkString.cpp create mode 100755 xpcom/ds/nsWorkString.h diff --git a/xpcom/ds/nsWorkString.cpp b/xpcom/ds/nsWorkString.cpp new file mode 100755 index 000000000000..54fe14f2c50e --- /dev/null +++ b/xpcom/ds/nsWorkString.cpp @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* + * 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) 2000 Netscape Communications Corporation. All + * Rights Reserved. + * + * Original Author: + * Scott Collins + * + * Contributor(s): + */ + +#include "nsWorkString.h" + +void +nsWorkString::SetLength( PRUint32 aNewLength ) + { + if ( aNewLength > mCapacity ) + { + PRUint32 newCapacity = mCapacity ? mCapacity : kInitialWorkStringCapacity; + while ( newCapacity < aNewLength ) + newCapacity += newCapacity; + SetCapacity(newCapacity); + } + inherited::SetLength(aNewLength); + } + +void +nsWorkCString::SetLength( PRUint32 aNewLength ) + { + if ( aNewLength > mCapacity ) + { + PRUint32 newCapacity = mCapacity ? mCapacity : kInitialWorkCStringCapacity; + while ( newCapacity < aNewLength ) + newCapacity += newCapacity; + SetCapacity(newCapacity); + } + inherited::SetLength(aNewLength); + } diff --git a/xpcom/ds/nsWorkString.h b/xpcom/ds/nsWorkString.h new file mode 100755 index 000000000000..1fc65cd71ac1 --- /dev/null +++ b/xpcom/ds/nsWorkString.h @@ -0,0 +1,70 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* + * 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) 2000 Netscape Communications Corporation. All + * Rights Reserved. + * + * Original Author: + * Scott Collins + * + * Contributor(s): + */ + +#ifndef nsWorkString_h___ +#define nsWorkString_h___ + +#include "nsString.h" + + + /* + The following two classes could be based on |nsAutoString| and + |nsCAutoString|, respectively. The decision should be made based + on profiling. + */ + +class NS_COM nsWorkString : public nsString + { + private: + typedef nsString inherited; + + public: + static const PRUint32 kInitialWorkStringCapacity = 32; + + nsWorkString() : inherited() { } + nsWorkString( const nsAReadableString& aReadable ) : inherited(aReadable) { } + nsWorkString( const PRUnichar* aString, PRUint32 aLength ) : inherited(aString, PRInt32(aLength)) { } + nsWorkString( const PRUnichar* aString ) : inherited(aString) { } + + virtual void SetLength( PRUint32 aNewLength ); + }; + +class NS_COM nsWorkCString : public nsCString + { + private: + typedef nsCString inherited; + + public: + static const PRUint32 kInitialWorkCStringCapacity = 32; + + nsWorkCString() : inherited() { } + nsWorkCString( const nsAReadableCString& aReadable ) : inherited(aReadable) { } + nsWorkCString( const char* aString, PRUint32 aLength ) : inherited(aString, PRInt32(aLength)) { } + nsWorkCString( const char* aString ) : inherited(aString) { } + + virtual void SetLength( PRUint32 aNewLength ); + }; + +#endif // !defined(nsWorkString_h___)