From 6fbf464bce2ec044c9d7f252dafddbd3e8c1ae9e Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Sun, 26 Sep 1999 10:05:51 +0000 Subject: [PATCH] Refcounted case conversion service properly git-svn-id: svn://10.0.0.236/trunk@49094 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsTextTransformer.cpp | 23 ++++++++++--------- .../html/base/src/nsTextTransformer.cpp | 23 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/mozilla/layout/generic/nsTextTransformer.cpp b/mozilla/layout/generic/nsTextTransformer.cpp index 3f74d868f6c..60933747f55 100644 --- a/mozilla/layout/generic/nsTextTransformer.cpp +++ b/mozilla/layout/generic/nsTextTransformer.cpp @@ -32,6 +32,7 @@ static NS_DEFINE_IID(kUnicharUtilCID, NS_UNICHARUTIL_CID); static NS_DEFINE_IID(kICaseConversionIID, NS_ICASECONVERSION_IID); static nsICaseConversion* gCaseConv = nsnull; +static nsrefcnt gCaseConvRefCnt = 0; //#define DEBUG_GETPREVWORD // XXX I'm sure there are other special characters @@ -47,6 +48,13 @@ nsTextTransformer::nsTextTransformer(nsILineBreaker* aLineBreaker, mLineBreaker(aLineBreaker), mWordBreaker(aWordBreaker) { + if (gCaseConvRefCnt++ == 0) { + nsresult res; + res = nsServiceManager::GetService(kUnicharUtilCID, kICaseConversionIID, + (nsISupports**)&gCaseConv); + NS_ASSERTION( NS_SUCCEEDED(res), "cannot get UnicharUtil"); + NS_ASSERTION( gCaseConv != NULL, "cannot get UnicharUtil"); + } } nsTextTransformer::~nsTextTransformer() @@ -54,6 +62,10 @@ nsTextTransformer::~nsTextTransformer() if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } + if (--gCaseConvRefCnt == 0) { + nsServiceManager::ReleaseService(kUnicharUtilCID, gCaseConv); + gCaseConv = nsnull; + } } nsresult @@ -104,17 +116,6 @@ nsTextTransformer::Init(nsIFrame* aFrame, mPreformatted = (NS_STYLE_WHITESPACE_PRE == styleText->mWhiteSpace) || (NS_STYLE_WHITESPACE_MOZ_PRE_WRAP == styleText->mWhiteSpace); mTextTransform = styleText->mTextTransform; - - if(NS_STYLE_TEXT_TRANSFORM_NONE != mTextTransform) - { - if(nsnull == gCaseConv) { - nsresult res; - res = nsServiceManager::GetService(kUnicharUtilCID, kICaseConversionIID, - (nsISupports**)&gCaseConv); - NS_ASSERTION( NS_SUCCEEDED(res), "cannot get UnicharUtil"); - NS_ASSERTION( gCaseConv != NULL, "cannot get UnicharUtil"); - } - } return NS_OK; } diff --git a/mozilla/layout/html/base/src/nsTextTransformer.cpp b/mozilla/layout/html/base/src/nsTextTransformer.cpp index 3f74d868f6c..60933747f55 100644 --- a/mozilla/layout/html/base/src/nsTextTransformer.cpp +++ b/mozilla/layout/html/base/src/nsTextTransformer.cpp @@ -32,6 +32,7 @@ static NS_DEFINE_IID(kUnicharUtilCID, NS_UNICHARUTIL_CID); static NS_DEFINE_IID(kICaseConversionIID, NS_ICASECONVERSION_IID); static nsICaseConversion* gCaseConv = nsnull; +static nsrefcnt gCaseConvRefCnt = 0; //#define DEBUG_GETPREVWORD // XXX I'm sure there are other special characters @@ -47,6 +48,13 @@ nsTextTransformer::nsTextTransformer(nsILineBreaker* aLineBreaker, mLineBreaker(aLineBreaker), mWordBreaker(aWordBreaker) { + if (gCaseConvRefCnt++ == 0) { + nsresult res; + res = nsServiceManager::GetService(kUnicharUtilCID, kICaseConversionIID, + (nsISupports**)&gCaseConv); + NS_ASSERTION( NS_SUCCEEDED(res), "cannot get UnicharUtil"); + NS_ASSERTION( gCaseConv != NULL, "cannot get UnicharUtil"); + } } nsTextTransformer::~nsTextTransformer() @@ -54,6 +62,10 @@ nsTextTransformer::~nsTextTransformer() if (mBuffer != mAutoWordBuffer) { delete [] mBuffer; } + if (--gCaseConvRefCnt == 0) { + nsServiceManager::ReleaseService(kUnicharUtilCID, gCaseConv); + gCaseConv = nsnull; + } } nsresult @@ -104,17 +116,6 @@ nsTextTransformer::Init(nsIFrame* aFrame, mPreformatted = (NS_STYLE_WHITESPACE_PRE == styleText->mWhiteSpace) || (NS_STYLE_WHITESPACE_MOZ_PRE_WRAP == styleText->mWhiteSpace); mTextTransform = styleText->mTextTransform; - - if(NS_STYLE_TEXT_TRANSFORM_NONE != mTextTransform) - { - if(nsnull == gCaseConv) { - nsresult res; - res = nsServiceManager::GetService(kUnicharUtilCID, kICaseConversionIID, - (nsISupports**)&gCaseConv); - NS_ASSERTION( NS_SUCCEEDED(res), "cannot get UnicharUtil"); - NS_ASSERTION( gCaseConv != NULL, "cannot get UnicharUtil"); - } - } return NS_OK; }