From e790d2ca6341bcdef1ebdb729f6366713b2c7a8a Mon Sep 17 00:00:00 2001 From: "kipp%netscape.com" Date: Wed, 22 Sep 1999 00:40:16 +0000 Subject: [PATCH] Changed to have the stack buffer embedded in the xformer git-svn-id: svn://10.0.0.236/trunk@48685 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsTextTransformer.cpp | 30 +++++-------------- mozilla/layout/generic/nsTextTransformer.h | 24 ++++++++++----- .../html/base/src/nsTextTransformer.cpp | 30 +++++-------------- .../layout/html/base/src/nsTextTransformer.h | 24 ++++++++++----- 4 files changed, 46 insertions(+), 62 deletions(-) diff --git a/mozilla/layout/generic/nsTextTransformer.cpp b/mozilla/layout/generic/nsTextTransformer.cpp index 3da5f840f8a..3f74d868f6c 100644 --- a/mozilla/layout/generic/nsTextTransformer.cpp +++ b/mozilla/layout/generic/nsTextTransformer.cpp @@ -39,12 +39,10 @@ static nsICaseConversion* gCaseConv = nsnull; #define MAX_UNIBYTE 127 -nsTextTransformer::nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, - nsILineBreaker* aLineBreaker, +nsTextTransformer::nsTextTransformer(nsILineBreaker* aLineBreaker, nsIWordBreaker* aWordBreaker) - : mAutoBuffer(aBuffer), - mBuffer(aBuffer), - mBufferLength(aBufLen < 0 ? 0 : aBufLen), + : mBuffer(mAutoWordBuffer), + mBufferLength(NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE), mHasMultibyte(PR_FALSE), mLineBreaker(aLineBreaker), mWordBreaker(aWordBreaker) @@ -53,7 +51,7 @@ nsTextTransformer::nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, nsTextTransformer::~nsTextTransformer() { - if (mBuffer != mAutoBuffer) { + if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } } @@ -63,14 +61,6 @@ nsTextTransformer::Init(nsIFrame* aFrame, nsIContent* aContent, PRInt32 aStartingOffset) { - // Make sure we have *some* space in case arguments to the ctor were - // bizzare. - if (mBufferLength < 100) { - if (!GrowBuffer()) { - return NS_ERROR_OUT_OF_MEMORY; - } - } - // Get the frames text content nsITextContent* tc; if (NS_OK != aContent->QueryInterface(kITextContentIID, (void**) &tc)) { @@ -143,8 +133,9 @@ nsTextTransformer::GrowBuffer(PRBool aForNextWord) if(aForNextWord) nsCRT::memcpy(newBuffer, mBuffer, sizeof(PRUnichar) * mBufferLength); else - nsCRT::memcpy(&newBuffer[mBufferLength], mBuffer, sizeof(PRUnichar) * mBufferLength); - if (mBuffer != mAutoBuffer) { + nsCRT::memcpy(&newBuffer[mBufferLength], mBuffer, + sizeof(PRUnichar) * mBufferLength); + if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } } @@ -678,10 +669,3 @@ nsTextTransformer::GetPrevWord(PRBool aInWord, #endif return &(mBuffer[mBufferLength-wordLen]); } - -PRUnichar* -nsTextTransformer::GetTextAt(PRInt32 aOffset) -{ - // XXX - return mBuffer + aOffset; -} diff --git a/mozilla/layout/generic/nsTextTransformer.h b/mozilla/layout/generic/nsTextTransformer.h index fc8ee87ede0..3c11dae6d01 100644 --- a/mozilla/layout/generic/nsTextTransformer.h +++ b/mozilla/layout/generic/nsTextTransformer.h @@ -28,6 +28,8 @@ class nsTextRun; class nsILineBreaker; class nsIWordBreaker; +#define NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE 100 + /** * This object manages the transformation of text: * @@ -46,11 +48,10 @@ class nsIWordBreaker; */ class nsTextTransformer { public: - - // The text transformer does not hold a reference to the line breaker - // and work breaker objects - nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, - nsILineBreaker* aLineBreaker, nsIWordBreaker *aWordBreaker); + // Note: The text transformer does not hold a reference to the line + // breaker and work breaker objects + nsTextTransformer(nsILineBreaker* aLineBreaker, + nsIWordBreaker *aWordBreaker); ~nsTextTransformer(); @@ -82,12 +83,17 @@ public: return mHasMultibyte; } - PRUnichar* GetTextAt(PRInt32 aOffset); + PRUnichar* GetWordBuffer() { + return mBuffer; + } + + PRInt32 GetWordBufferLength() const { + return mBufferLength; + } protected: - PRBool GrowBuffer(PRBool aForNextWord=PR_TRUE); + PRBool GrowBuffer(PRBool aForNextWord = PR_TRUE); - PRUnichar* mAutoBuffer; PRUnichar* mBuffer; PRInt32 mBufferLength; PRBool mHasMultibyte; @@ -106,6 +112,8 @@ protected: nsILineBreaker* mLineBreaker; // does NOT hold reference nsIWordBreaker* mWordBreaker; // does NOT hold reference + + PRUnichar mAutoWordBuffer[NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE]; }; #endif /* nsTextTransformer_h___ */ diff --git a/mozilla/layout/html/base/src/nsTextTransformer.cpp b/mozilla/layout/html/base/src/nsTextTransformer.cpp index 3da5f840f8a..3f74d868f6c 100644 --- a/mozilla/layout/html/base/src/nsTextTransformer.cpp +++ b/mozilla/layout/html/base/src/nsTextTransformer.cpp @@ -39,12 +39,10 @@ static nsICaseConversion* gCaseConv = nsnull; #define MAX_UNIBYTE 127 -nsTextTransformer::nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, - nsILineBreaker* aLineBreaker, +nsTextTransformer::nsTextTransformer(nsILineBreaker* aLineBreaker, nsIWordBreaker* aWordBreaker) - : mAutoBuffer(aBuffer), - mBuffer(aBuffer), - mBufferLength(aBufLen < 0 ? 0 : aBufLen), + : mBuffer(mAutoWordBuffer), + mBufferLength(NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE), mHasMultibyte(PR_FALSE), mLineBreaker(aLineBreaker), mWordBreaker(aWordBreaker) @@ -53,7 +51,7 @@ nsTextTransformer::nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, nsTextTransformer::~nsTextTransformer() { - if (mBuffer != mAutoBuffer) { + if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } } @@ -63,14 +61,6 @@ nsTextTransformer::Init(nsIFrame* aFrame, nsIContent* aContent, PRInt32 aStartingOffset) { - // Make sure we have *some* space in case arguments to the ctor were - // bizzare. - if (mBufferLength < 100) { - if (!GrowBuffer()) { - return NS_ERROR_OUT_OF_MEMORY; - } - } - // Get the frames text content nsITextContent* tc; if (NS_OK != aContent->QueryInterface(kITextContentIID, (void**) &tc)) { @@ -143,8 +133,9 @@ nsTextTransformer::GrowBuffer(PRBool aForNextWord) if(aForNextWord) nsCRT::memcpy(newBuffer, mBuffer, sizeof(PRUnichar) * mBufferLength); else - nsCRT::memcpy(&newBuffer[mBufferLength], mBuffer, sizeof(PRUnichar) * mBufferLength); - if (mBuffer != mAutoBuffer) { + nsCRT::memcpy(&newBuffer[mBufferLength], mBuffer, + sizeof(PRUnichar) * mBufferLength); + if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } } @@ -678,10 +669,3 @@ nsTextTransformer::GetPrevWord(PRBool aInWord, #endif return &(mBuffer[mBufferLength-wordLen]); } - -PRUnichar* -nsTextTransformer::GetTextAt(PRInt32 aOffset) -{ - // XXX - return mBuffer + aOffset; -} diff --git a/mozilla/layout/html/base/src/nsTextTransformer.h b/mozilla/layout/html/base/src/nsTextTransformer.h index fc8ee87ede0..3c11dae6d01 100644 --- a/mozilla/layout/html/base/src/nsTextTransformer.h +++ b/mozilla/layout/html/base/src/nsTextTransformer.h @@ -28,6 +28,8 @@ class nsTextRun; class nsILineBreaker; class nsIWordBreaker; +#define NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE 100 + /** * This object manages the transformation of text: * @@ -46,11 +48,10 @@ class nsIWordBreaker; */ class nsTextTransformer { public: - - // The text transformer does not hold a reference to the line breaker - // and work breaker objects - nsTextTransformer(PRUnichar* aBuffer, PRInt32 aBufLen, - nsILineBreaker* aLineBreaker, nsIWordBreaker *aWordBreaker); + // Note: The text transformer does not hold a reference to the line + // breaker and work breaker objects + nsTextTransformer(nsILineBreaker* aLineBreaker, + nsIWordBreaker *aWordBreaker); ~nsTextTransformer(); @@ -82,12 +83,17 @@ public: return mHasMultibyte; } - PRUnichar* GetTextAt(PRInt32 aOffset); + PRUnichar* GetWordBuffer() { + return mBuffer; + } + + PRInt32 GetWordBufferLength() const { + return mBufferLength; + } protected: - PRBool GrowBuffer(PRBool aForNextWord=PR_TRUE); + PRBool GrowBuffer(PRBool aForNextWord = PR_TRUE); - PRUnichar* mAutoBuffer; PRUnichar* mBuffer; PRInt32 mBufferLength; PRBool mHasMultibyte; @@ -106,6 +112,8 @@ protected: nsILineBreaker* mLineBreaker; // does NOT hold reference nsIWordBreaker* mWordBreaker; // does NOT hold reference + + PRUnichar mAutoWordBuffer[NS_TEXT_TRANSFORMER_AUTO_WORD_BUF_SIZE]; }; #endif /* nsTextTransformer_h___ */