Adding a new string class for to help fix performance problems.

This commit is contained in:
scc%mozilla.org 2000-06-14 04:10:00 +00:00
Родитель 0eba873df8
Коммит cc0aa5c6d7
2 изменённых файлов: 122 добавлений и 0 удалений

52
xpcom/ds/nsWorkString.cpp Executable file
Просмотреть файл

@ -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 <scc@mozilla.org>
*
* 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);
}

70
xpcom/ds/nsWorkString.h Executable file
Просмотреть файл

@ -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 <scc@mozilla.org>
*
* 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___)