no need to hold CollatorWrapper by std::unique_ptr

allocate it inline, it is only one pointer in size

Change-Id: Idb6217e6c9c37da92427aa6c497223a84015c553
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147742
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2023-02-26 20:37:34 +02:00
committed by Noel Grandin
parent 44a3085f9a
commit 09680fadbc
8 changed files with 41 additions and 40 deletions

View File

@@ -20,13 +20,13 @@
#include <sfx2/tabdlg.hxx> #include <sfx2/tabdlg.hxx>
#include <svx/langbox.hxx> #include <svx/langbox.hxx>
#include <unotools/collatorwrapper.hxx>
#include <map> #include <map>
#include <set> #include <set>
#include <utility> #include <utility>
class CharClass; class CharClass;
class CollatorWrapper;
class SmartTagMgr; class SmartTagMgr;
namespace editeng { class SortedAutoCompleteStrings; } namespace editeng { class SortedAutoCompleteStrings; }
@@ -166,7 +166,7 @@ private:
std::set<OUString> aFormatText; std::set<OUString> aFormatText;
std::map<LanguageType, DoubleStringArray> std::map<LanguageType, DoubleStringArray>
aDoubleStringTable; aDoubleStringTable;
std::unique_ptr<CollatorWrapper> pCompareClass; std::optional<CollatorWrapper> moCompareClass;
std::unique_ptr<CharClass> pCharClass; std::unique_ptr<CharClass> pCharClass;
LanguageType eLang; LanguageType eLang;
@@ -227,7 +227,7 @@ class OfaAutocorrExceptPage : public SfxTabPage
{ {
private: private:
StringsTable aStringsTable; StringsTable aStringsTable;
std::unique_ptr<CollatorWrapper> pCompareClass; std::optional<CollatorWrapper> moCompareClass;
LanguageType eLang; LanguageType eLang;
std::unique_ptr<weld::Entry> m_xAbbrevED; std::unique_ptr<weld::Entry> m_xAbbrevED;

View File

@@ -696,8 +696,8 @@ OfaAutocorrReplacePage::OfaAutocorrReplacePage(weld::Container* pPage, weld::Dia
bSWriter = pMod == SfxModule::GetActiveModule(); bSWriter = pMod == SfxModule::GetActiveModule();
LanguageTag aLanguageTag( eLastDialogLanguage ); LanguageTag aLanguageTag( eLastDialogLanguage );
pCompareClass.reset( new CollatorWrapper( comphelper::getProcessComponentContext() ) ); moCompareClass.emplace( comphelper::getProcessComponentContext() );
pCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 ); moCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 );
pCharClass.reset( new CharClass( std::move(aLanguageTag) ) ); pCharClass.reset( new CharClass( std::move(aLanguageTag) ) );
auto nColWidth = m_xReplaceTLB->get_approximate_digit_width() * 32; auto nColWidth = m_xReplaceTLB->get_approximate_digit_width() * 32;
@@ -720,7 +720,7 @@ OfaAutocorrReplacePage::~OfaAutocorrReplacePage()
aDoubleStringTable.clear(); aDoubleStringTable.clear();
aChangesTable.clear(); aChangesTable.clear();
pCompareClass.reset(); moCompareClass.reset();
pCharClass.reset(); pCharClass.reset();
} }
@@ -902,8 +902,8 @@ void OfaAutocorrReplacePage::SetLanguage(LanguageType eSet)
eLastDialogLanguage = eSet; eLastDialogLanguage = eSet;
LanguageTag aLanguageTag( eLastDialogLanguage ); LanguageTag aLanguageTag( eLastDialogLanguage );
pCompareClass.reset( new CollatorWrapper( comphelper::getProcessComponentContext() ) ); moCompareClass.emplace( comphelper::getProcessComponentContext() );
pCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 ); moCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 );
pCharClass.reset( new CharClass( std::move(aLanguageTag) ) ); pCharClass.reset( new CharClass( std::move(aLanguageTag) ) );
ModifyHdl(*m_xShortED); ModifyHdl(*m_xShortED);
} }
@@ -917,7 +917,7 @@ IMPL_LINK(OfaAutocorrReplacePage, SelectHdl, weld::TreeView&, rBox, void)
OUString sTmpShort(rBox.get_text(nEntry, 0)); OUString sTmpShort(rBox.get_text(nEntry, 0));
// if the text is set via ModifyHdl, the cursor is always at the beginning // if the text is set via ModifyHdl, the cursor is always at the beginning
// of a word, although you're editing here // of a word, although you're editing here
bool bSameContent = 0 == pCompareClass->compareString(sTmpShort, m_xShortED->get_text()); bool bSameContent = 0 == moCompareClass->compareString(sTmpShort, m_xShortED->get_text());
int nStartPos, nEndPos; int nStartPos, nEndPos;
m_xShortED->get_selection_bounds(nStartPos, nEndPos); m_xShortED->get_selection_bounds(nStartPos, nEndPos);
if (m_xShortED->get_text() != sTmpShort) if (m_xShortED->get_text() != sTmpShort)
@@ -1055,7 +1055,7 @@ bool OfaAutocorrReplacePage::NewDelHdl(const weld::Widget* pBtn)
int nCount = m_xReplaceTLB->n_children(); int nCount = m_xReplaceTLB->n_children();
for (j = 0; j < nCount; ++j) for (j = 0; j < nCount; ++j)
{ {
if (0 >= pCompareClass->compareString(sEntry, m_xReplaceTLB->get_text(j, 0))) if (0 >= moCompareClass->compareString(sEntry, m_xReplaceTLB->get_text(j, 0)))
break; break;
} }
nPos = j; nPos = j;
@@ -1108,7 +1108,7 @@ IMPL_LINK(OfaAutocorrReplacePage, ModifyHdl, weld::Entry&, rEdt, void)
&bTmpSelEntry, &bFirstSelIterSet, &bTmpSelEntry, &bFirstSelIterSet,
&xFirstSel, &aWordStr](weld::TreeIter& rIter){ &xFirstSel, &aWordStr](weld::TreeIter& rIter){
OUString aTestStr = m_xReplaceTLB->get_text(rIter, 0); OUString aTestStr = m_xReplaceTLB->get_text(rIter, 0);
if( pCompareClass->compareString(rEntry, aTestStr ) == 0 ) if( moCompareClass->compareString(rEntry, aTestStr ) == 0 )
{ {
if (!rRepString.isEmpty()) if (!rRepString.isEmpty())
bFirstSelect = true; bFirstSelect = true;
@@ -1208,8 +1208,8 @@ OfaAutocorrExceptPage::OfaAutocorrExceptPage(weld::Container* pPage, weld::Dialo
m_xDoubleCapsLB->set_size_request(-1, m_xDoubleCapsLB->get_height_rows(6)); m_xDoubleCapsLB->set_size_request(-1, m_xDoubleCapsLB->get_height_rows(6));
css::lang::Locale aLcl( LanguageTag::convertToLocale(eLastDialogLanguage )); css::lang::Locale aLcl( LanguageTag::convertToLocale(eLastDialogLanguage ));
pCompareClass.reset( new CollatorWrapper( comphelper::getProcessComponentContext() ) ); moCompareClass.emplace( comphelper::getProcessComponentContext() );
pCompareClass->loadDefaultCollator( aLcl, 0 ); moCompareClass->loadDefaultCollator( aLcl, 0 );
m_xNewAbbrevPB->connect_clicked(LINK(this, OfaAutocorrExceptPage, NewDelButtonHdl)); m_xNewAbbrevPB->connect_clicked(LINK(this, OfaAutocorrExceptPage, NewDelButtonHdl));
m_xDelAbbrevPB->connect_clicked(LINK(this, OfaAutocorrExceptPage, NewDelButtonHdl)); m_xDelAbbrevPB->connect_clicked(LINK(this, OfaAutocorrExceptPage, NewDelButtonHdl));
@@ -1228,7 +1228,7 @@ OfaAutocorrExceptPage::OfaAutocorrExceptPage(weld::Container* pPage, weld::Dialo
OfaAutocorrExceptPage::~OfaAutocorrExceptPage() OfaAutocorrExceptPage::~OfaAutocorrExceptPage()
{ {
aStringsTable.clear(); aStringsTable.clear();
pCompareClass.reset(); moCompareClass.reset();
} }
std::unique_ptr<SfxTabPage> OfaAutocorrExceptPage::Create(weld::Container* pPage, weld::DialogController* pController, std::unique_ptr<SfxTabPage> OfaAutocorrExceptPage::Create(weld::Container* pPage, weld::DialogController* pController,
@@ -1363,8 +1363,8 @@ void OfaAutocorrExceptPage::SetLanguage(LanguageType eSet)
// save old settings and fill anew // save old settings and fill anew
RefillReplaceBoxes(false, eLang, eSet); RefillReplaceBoxes(false, eLang, eSet);
eLastDialogLanguage = eSet; eLastDialogLanguage = eSet;
pCompareClass.reset( new CollatorWrapper( comphelper::getProcessComponentContext() ) ); moCompareClass.emplace( comphelper::getProcessComponentContext() );
pCompareClass->loadDefaultCollator( LanguageTag::convertToLocale( eLastDialogLanguage ), 0 ); moCompareClass->loadDefaultCollator( LanguageTag::convertToLocale( eLastDialogLanguage ), 0 );
ModifyHdl(*m_xAbbrevED); ModifyHdl(*m_xAbbrevED);
ModifyHdl(*m_xDoubleCapsED); ModifyHdl(*m_xDoubleCapsED);
} }
@@ -1509,7 +1509,7 @@ IMPL_LINK(OfaAutocorrExceptPage, ModifyHdl, weld::Entry&, rEdt, void)
bool bEntryLen = !sEntry.isEmpty(); bool bEntryLen = !sEntry.isEmpty();
if (&rEdt == m_xAbbrevED.get()) if (&rEdt == m_xAbbrevED.get())
{ {
bool bSame = lcl_FindEntry(*m_xAbbrevLB, sEntry, *pCompareClass); bool bSame = lcl_FindEntry(*m_xAbbrevLB, sEntry, *moCompareClass);
if(bSame && sEntry != m_xAbbrevLB->get_selected_text()) if(bSame && sEntry != m_xAbbrevLB->get_selected_text())
rEdt.set_text(m_xAbbrevLB->get_selected_text()); rEdt.set_text(m_xAbbrevLB->get_selected_text());
m_xNewAbbrevPB->set_sensitive(!bSame && bEntryLen); m_xNewAbbrevPB->set_sensitive(!bSame && bEntryLen);
@@ -1517,7 +1517,7 @@ IMPL_LINK(OfaAutocorrExceptPage, ModifyHdl, weld::Entry&, rEdt, void)
} }
else else
{ {
bool bSame = lcl_FindEntry(*m_xDoubleCapsLB, sEntry, *pCompareClass); bool bSame = lcl_FindEntry(*m_xDoubleCapsLB, sEntry, *moCompareClass);
if(bSame && sEntry != m_xDoubleCapsLB->get_selected_text()) if(bSame && sEntry != m_xDoubleCapsLB->get_selected_text())
rEdt.set_text(m_xDoubleCapsLB->get_selected_text()); rEdt.set_text(m_xDoubleCapsLB->get_selected_text());
m_xNewDoublePB->set_sensitive(!bSame && bEntryLen); m_xNewDoublePB->set_sensitive(!bSame && bEntryLen);

View File

@@ -220,8 +220,8 @@ void ExtensionBox_Impl::Init()
m_xRemoveListener = new ExtensionRemovedListener( this ); m_xRemoveListener = new ExtensionRemovedListener( this );
m_pLocale.reset( new lang::Locale( Application::GetSettings().GetLanguageTag().getLocale() ) ); m_pLocale.reset( new lang::Locale( Application::GetSettings().GetLanguageTag().getLocale() ) );
m_pCollator.reset( new CollatorWrapper( ::comphelper::getProcessComponentContext() ) ); m_oCollator.emplace( ::comphelper::getProcessComponentContext() );
m_pCollator->loadDefaultCollator( *m_pLocale, i18n::CollatorOptions::CollatorOptions_IGNORE_CASE ); m_oCollator->loadDefaultCollator( *m_pLocale, i18n::CollatorOptions::CollatorOptions_IGNORE_CASE );
} }
ExtensionBox_Impl::~ExtensionBox_Impl() ExtensionBox_Impl::~ExtensionBox_Impl()
@@ -241,7 +241,7 @@ ExtensionBox_Impl::~ExtensionBox_Impl()
m_xRemoveListener.clear(); m_xRemoveListener.clear();
m_pLocale.reset(); m_pLocale.reset();
m_pCollator.reset(); m_oCollator.reset();
} }
sal_Int32 ExtensionBox_Impl::getItemCount() const sal_Int32 ExtensionBox_Impl::getItemCount() const
@@ -826,7 +826,7 @@ bool ExtensionBox_Impl::FindEntryPos( const TEntry_Impl& rEntry, const tools::Lo
if ( nStart == nEnd ) if ( nStart == nEnd )
{ {
eCompare = rEntry->CompareTo( m_pCollator.get(), m_vEntries[ nStart ] ); eCompare = rEntry->CompareTo( &*m_oCollator, m_vEntries[ nStart ] );
if ( eCompare < 0 ) if ( eCompare < 0 )
return false; return false;
else if ( eCompare == 0 ) else if ( eCompare == 0 )
@@ -847,7 +847,7 @@ bool ExtensionBox_Impl::FindEntryPos( const TEntry_Impl& rEntry, const tools::Lo
} }
const tools::Long nMid = nStart + ( ( nEnd - nStart ) / 2 ); const tools::Long nMid = nStart + ( ( nEnd - nStart ) / 2 );
eCompare = rEntry->CompareTo( m_pCollator.get(), m_vEntries[ nMid ] ); eCompare = rEntry->CompareTo( &*m_oCollator, m_vEntries[ nMid ] );
if ( eCompare < 0 ) if ( eCompare < 0 )
return FindEntryPos( rEntry, nStart, nMid-1, nPos ); return FindEntryPos( rEntry, nStart, nMid-1, nPos );

View File

@@ -33,6 +33,7 @@
#include <com/sun/star/deployment/XPackage.hpp> #include <com/sun/star/deployment/XPackage.hpp>
#include <memory> #include <memory>
#include <optional>
#include "dp_gui.h" #include "dp_gui.h"
@@ -137,7 +138,7 @@ class ExtensionBox_Impl : public weld::CustomWidgetController
std::vector< TEntry_Impl > m_vRemovedEntries; std::vector< TEntry_Impl > m_vRemovedEntries;
std::unique_ptr<css::lang::Locale> m_pLocale; std::unique_ptr<css::lang::Locale> m_pLocale;
std::unique_ptr<CollatorWrapper> m_pCollator; std::optional<CollatorWrapper> m_oCollator;
//Holds weak references to extensions to which is we have added an XEventListener //Holds weak references to extensions to which is we have added an XEventListener
std::vector< css::uno::WeakReference< std::vector< css::uno::WeakReference<

View File

@@ -21,14 +21,15 @@
#define INCLUDED_UNOTOOLS_INTLWRAPPER_HXX #define INCLUDED_UNOTOOLS_INTLWRAPPER_HXX
#include <unotools/unotoolsdllapi.h> #include <unotools/unotoolsdllapi.h>
#include <unotools/collatorwrapper.hxx>
#include <com/sun/star/uno/Reference.h> #include <com/sun/star/uno/Reference.h>
#include <i18nlangtag/languagetag.hxx> #include <i18nlangtag/languagetag.hxx>
#include <memory> #include <memory>
#include <optional>
namespace com::sun::star::uno { class XComponentContext; } namespace com::sun::star::uno { class XComponentContext; }
class CollatorWrapper;
class LocaleDataWrapper; class LocaleDataWrapper;
/** /**
@@ -54,8 +55,8 @@ private:
css::uno::Reference< css::uno::XComponentContext > m_xContext; css::uno::Reference< css::uno::XComponentContext > m_xContext;
std::unique_ptr<LocaleDataWrapper> pLocaleData; std::unique_ptr<LocaleDataWrapper> pLocaleData;
std::unique_ptr<CollatorWrapper> pCollator; std::optional<CollatorWrapper> moCollator;
std::unique_ptr<CollatorWrapper> pCaseCollator; std::optional<CollatorWrapper> moCaseCollator;
void ImplNewLocaleData() const; void ImplNewLocaleData() const;
void ImplNewCollator( bool bCaseSensitive ) const; void ImplNewCollator( bool bCaseSensitive ) const;
@@ -73,16 +74,16 @@ public:
/// case insensitive collator, simple IGNORE_CASE /// case insensitive collator, simple IGNORE_CASE
const CollatorWrapper* getCollator() const const CollatorWrapper* getCollator() const
{ {
if ( !pCollator ) if ( !moCollator )
ImplNewCollator( false ); ImplNewCollator( false );
return pCollator.get(); return &*moCollator;
} }
/// case sensitive collator /// case sensitive collator
const CollatorWrapper* getCaseCollator() const const CollatorWrapper* getCaseCollator() const
{ {
if ( !pCaseCollator ) if ( !moCaseCollator )
ImplNewCollator( true ); ImplNewCollator( true );
return pCaseCollator.get(); return &*moCaseCollator;
} }
}; };

View File

@@ -522,7 +522,7 @@ void ScTabPageSortOptions::Init()
m_xColRes.reset(new CollatorResource); m_xColRes.reset(new CollatorResource);
//! use CollatorWrapper from document? //! use CollatorWrapper from document?
m_xColWrap.reset(new CollatorWrapper(comphelper::getProcessComponentContext())); m_oColWrap.emplace(comphelper::getProcessComponentContext());
const ScSortItem& rSortItem = GetItemSet().Get( nWhichSort ); const ScSortItem& rSortItem = GetItemSet().Get( nWhichSort );
@@ -660,7 +660,7 @@ bool ScTabPageSortOptions::FillItemSet( SfxItemSet* rArgSet )
OUString sAlg; OUString sAlg;
if ( eLang != LANGUAGE_SYSTEM ) if ( eLang != LANGUAGE_SYSTEM )
{ {
uno::Sequence<OUString> aAlgos = m_xColWrap->listCollatorAlgorithms( uno::Sequence<OUString> aAlgos = m_oColWrap->listCollatorAlgorithms(
aNewSortData.aCollatorLocale ); aNewSortData.aCollatorLocale );
const int nSel = m_xLbAlgorithm->get_active(); const int nSel = m_xLbAlgorithm->get_active();
if ( nSel < aAlgos.getLength() ) if ( nSel < aAlgos.getLength() )
@@ -830,7 +830,7 @@ void ScTabPageSortOptions::FillAlgor()
else else
{ {
lang::Locale aLocale( LanguageTag::convertToLocale( eLang )); lang::Locale aLocale( LanguageTag::convertToLocale( eLang ));
const uno::Sequence<OUString> aAlgos = m_xColWrap->listCollatorAlgorithms( aLocale ); const uno::Sequence<OUString> aAlgos = m_oColWrap->listCollatorAlgorithms( aLocale );
nCount = aAlgos.getLength(); nCount = aAlgos.getLength();
for (const OUString& sAlg : aAlgos) for (const OUString& sAlg : aAlgos)

View File

@@ -121,7 +121,7 @@ private:
ScAddress theOutPos; ScAddress theOutPos;
std::unique_ptr<CollatorResource> m_xColRes; std::unique_ptr<CollatorResource> m_xColRes;
std::unique_ptr<CollatorWrapper> m_xColWrap; std::optional<CollatorWrapper> m_oColWrap;
std::unique_ptr<weld::CheckButton> m_xBtnCase; std::unique_ptr<weld::CheckButton> m_xBtnCase;
std::unique_ptr<weld::CheckButton> m_xBtnFormats; std::unique_ptr<weld::CheckButton> m_xBtnFormats;

View File

@@ -42,17 +42,16 @@ void IntlWrapper::ImplNewLocaleData() const
void IntlWrapper::ImplNewCollator( bool bCaseSensitive ) const void IntlWrapper::ImplNewCollator( bool bCaseSensitive ) const
{ {
CollatorWrapper* p = new CollatorWrapper( m_xContext );
if ( bCaseSensitive ) if ( bCaseSensitive )
{ {
p->loadDefaultCollator( maLanguageTag.getLocale(), 0 ); const_cast<IntlWrapper*>(this)->moCaseCollator.emplace(m_xContext);
const_cast<IntlWrapper*>(this)->pCaseCollator.reset(p); const_cast<IntlWrapper*>(this)->moCaseCollator->loadDefaultCollator( maLanguageTag.getLocale(), 0 );
} }
else else
{ {
p->loadDefaultCollator( maLanguageTag.getLocale(), const_cast<IntlWrapper*>(this)->moCollator.emplace(m_xContext);
const_cast<IntlWrapper*>(this)->moCollator->loadDefaultCollator( maLanguageTag.getLocale(),
css::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE ); css::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE );
const_cast<IntlWrapper*>(this)->pCollator.reset(p);
} }
} }