Refcounted case conversion service properly

This commit is contained in:
warren%netscape.com 1999-09-26 10:05:51 +00:00
Родитель d37526c717
Коммит 339d201a49
2 изменённых файлов: 24 добавлений и 22 удалений

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

@ -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;
}

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

@ -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;
}