[Libreoffice-commits] core.git: include/vcl vcl/source
Tobias Lippert
drtl at fastmail.fm
Fri Feb 21 07:38:52 PST 2014
include/vcl/settings.hxx | 47 +++++------
vcl/source/app/settings.cxx | 178 ++++++++------------------------------------
2 files changed, 55 insertions(+), 170 deletions(-)
New commits:
commit a9cfb745c5ade8b05b97a33c4cb5cc66941b803d
Author: Tobias Lippert <drtl at fastmail.fm>
Date: Sat Jan 11 21:03:11 2014 +0100
Replace handwritten reference counting with shared_ptr
This will help to avoid race conditions because the shared pointers
are thread safe and use atomic increments.
Conflicts:
include/vcl/settings.hxx
vcl/source/app/settings.cxx
Change-Id: Ie3d27d6412167855a0cea1442676b81b733c15e8
diff --git a/include/vcl/settings.hxx b/include/vcl/settings.hxx
index 0173b31..828c7a1 100644
--- a/include/vcl/settings.hxx
+++ b/include/vcl/settings.hxx
@@ -30,6 +30,8 @@
#include <i18nlangtag/languagetag.hxx>
#include <unotools/syslocale.hxx>
+#include <boost/shared_ptr.hpp>
+
class CollatorWrapper;
class LocaleDataWrapper;
@@ -44,12 +46,11 @@ namespace vcl {
class ImplMouseData
{
friend class MouseSettings;
-
+public:
ImplMouseData();
ImplMouseData( const ImplMouseData& rData );
private:
- sal_uLong mnRefCount;
sal_uLong mnOptions;
sal_uLong mnDoubleClkTime;
long mnDoubleClkWidth;
@@ -97,7 +98,7 @@ class VCL_DLLPUBLIC MouseSettings
void CopyData();
private:
- ImplMouseData* mpData;
+ boost::shared_ptr<ImplMouseData> mpData;
public:
MouseSettings();
@@ -241,13 +242,12 @@ class ImplStyleData
{
friend class StyleSettings;
+public:
ImplStyleData();
ImplStyleData( const ImplStyleData& rData );
- void SetStandardStyles();
private:
- sal_uLong mnRefCount;
-
+ void SetStandardStyles();
Color maActiveBorderColor;
Color maActiveColor;
Color maActiveColor2;
@@ -434,7 +434,7 @@ class VCL_DLLPUBLIC StyleSettings
void CopyData();
private:
- ImplStyleData* mpData;
+ boost::shared_ptr<ImplStyleData> mpData;
public:
StyleSettings();
@@ -833,8 +833,8 @@ public:
void SetOptions( sal_uLong nOptions )
{ CopyData(); mpData->mnOptions = nOptions; }
- sal_uLong GetOptions() const
- { return mpData->mnOptions; }
+ sal_uLong GetOptions() const;
+
void SetAutoMnemonic( bool bAutoMnemonic )
{ CopyData(); mpData->mnAutoMnemonic = (sal_uInt16)bAutoMnemonic; }
bool GetAutoMnemonic() const
@@ -958,15 +958,15 @@ protected:
class ImplMiscData
{
friend class MiscSettings;
+public:
ImplMiscData();
ImplMiscData( const ImplMiscData& rData );
private:
- sal_uLong mnRefCount;
- AutoState mnEnableATT;
+ AutoState mnEnableATT;
bool mbEnableLocalizedDecimalSep;
- AutoState mnDisablePrinting;
+ AutoState mnDisablePrinting;
};
// ----------------
@@ -978,7 +978,7 @@ class VCL_DLLPUBLIC MiscSettings
void CopyData();
private:
- ImplMiscData* mpData;
+ boost::shared_ptr<ImplMiscData> mpData;
public:
MiscSettings();
@@ -1006,12 +1006,11 @@ public:
class ImplHelpData
{
friend class HelpSettings;
-
+public:
ImplHelpData();
ImplHelpData( const ImplHelpData& rData );
private:
- sal_uLong mnRefCount;
sal_uLong mnOptions;
sal_uLong mnTipDelay;
sal_uLong mnTipTimeout;
@@ -1027,7 +1026,7 @@ class VCL_DLLPUBLIC HelpSettings
void CopyData();
private:
- ImplHelpData* mpData;
+ boost::shared_ptr<ImplHelpData> mpData;
public:
HelpSettings();
@@ -1063,14 +1062,13 @@ public:
// -----------------------
class ImplAllSettingsData
{
- friend class AllSettings;
-
- ImplAllSettingsData();
- ImplAllSettingsData( const ImplAllSettingsData& rData );
- ~ImplAllSettingsData();
+public:
+ ImplAllSettingsData();
+ ImplAllSettingsData( const ImplAllSettingsData& rData );
+ ~ImplAllSettingsData();
+ friend class AllSettings;
private:
- sal_uLong mnRefCount;
MouseSettings maMouseSettings;
StyleSettings maStyleSettings;
MiscSettings maMiscSettings;
@@ -1111,7 +1109,7 @@ class VCL_DLLPUBLIC AllSettings
void CopyData();
private:
- ImplAllSettingsData* mpData;
+ boost::shared_ptr<ImplAllSettingsData> mpData;
public:
AllSettings();
@@ -1125,8 +1123,7 @@ public:
void SetStyleSettings( const StyleSettings& rSet )
{ CopyData(); mpData->maStyleSettings = rSet; }
- const StyleSettings& GetStyleSettings() const
- { return mpData->maStyleSettings; }
+ const StyleSettings& GetStyleSettings() const;
void SetMiscSettings( const MiscSettings& rSet )
{ CopyData(); mpData->maMiscSettings = rSet; }
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index a5b7dd9..9714747 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -48,6 +48,9 @@ using namespace ::com::sun::star;
#include "svdata.hxx"
#include "impimagetree.hxx"
+
+#include <boost/make_shared.hpp>
+
// =======================================================================
@@ -55,7 +58,6 @@ using namespace ::com::sun::star;
ImplMouseData::ImplMouseData()
{
- mnRefCount = 1;
mnOptions = 0;
mnDoubleClkTime = 500;
mnDoubleClkWidth = 2;
@@ -83,7 +85,6 @@ ImplMouseData::ImplMouseData()
ImplMouseData::ImplMouseData( const ImplMouseData& rData )
{
- mnRefCount = 1;
mnOptions = rData.mnOptions;
mnDoubleClkTime = rData.mnDoubleClkTime;
mnDoubleClkWidth = rData.mnDoubleClkWidth;
@@ -110,49 +111,28 @@ ImplMouseData::ImplMouseData( const ImplMouseData& rData )
// -----------------------------------------------------------------------
MouseSettings::MouseSettings()
+: mpData(boost::make_shared<ImplMouseData>())
{
- mpData = new ImplMouseData();
}
// -----------------------------------------------------------------------
MouseSettings::MouseSettings( const MouseSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
-
- // copy shared instance data and increment reference counter
mpData = rSet.mpData;
- mpData->mnRefCount++;
}
// -----------------------------------------------------------------------
MouseSettings::~MouseSettings()
{
- // delete data if last reference
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
}
// -----------------------------------------------------------------------
const MouseSettings& MouseSettings::operator =( const MouseSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
-
- // increment reference counter first, to be able to assign oneself
- rSet.mpData->mnRefCount++;
-
- // delete data if last reference
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
-
mpData = rSet.mpData;
-
return *this;
}
@@ -160,11 +140,9 @@ const MouseSettings& MouseSettings::operator =( const MouseSettings& rSet )
void MouseSettings::CopyData()
{
- // copy if another references exist
- if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplMouseData( *mpData );
+ // copy if other references exist
+ if ( ! mpData.unique() ) {
+ mpData = boost::make_shared<ImplMouseData>(*mpData);
}
}
@@ -208,7 +186,6 @@ ImplStyleData::ImplStyleData() :
maPersonaHeaderBitmap(),
maPersonaFooterBitmap()
{
- mnRefCount = 1;
mnScrollBarSize = 16;
mnMinThumbSize = 16;
mnSplitSize = 3;
@@ -318,7 +295,6 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
maPersonaHeaderBitmap( rData.maPersonaHeaderBitmap ),
maPersonaFooterBitmap( rData.maPersonaFooterBitmap )
{
- mnRefCount = 1;
mnBorderSize = rData.mnBorderSize;
mnTitleHeight = rData.mnTitleHeight;
mnFloatTitleHeight = rData.mnFloatTitleHeight;
@@ -463,30 +439,21 @@ void ImplStyleData::SetStandardStyles()
// -----------------------------------------------------------------------
StyleSettings::StyleSettings()
+: mpData(boost::make_shared<ImplStyleData>())
{
- mpData = new ImplStyleData();
}
// -----------------------------------------------------------------------
StyleSettings::StyleSettings( const StyleSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
-
- // copy shared instance data and increment reference counter
mpData = rSet.mpData;
- mpData->mnRefCount++;
}
// -----------------------------------------------------------------------
StyleSettings::~StyleSettings()
{
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
}
const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const
@@ -853,19 +820,7 @@ Color StyleSettings::GetSeparatorColor() const
const StyleSettings& StyleSettings::operator =( const StyleSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
-
- // increase reference counter first, to be able to assign oneself
- rSet.mpData->mnRefCount++;
-
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
-
mpData = rSet.mpData;
-
return *this;
}
@@ -874,10 +829,8 @@ const StyleSettings& StyleSettings::operator =( const StyleSettings& rSet )
void StyleSettings::CopyData()
{
// copy if other references exist
- if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplStyleData( *mpData );
+ if ( ! mpData.unique() ) {
+ mpData = boost::make_shared<ImplStyleData>(*mpData);
}
}
@@ -1002,7 +955,6 @@ bool StyleSettings::operator ==( const StyleSettings& rSet ) const
ImplMiscData::ImplMiscData()
{
- mnRefCount = 1;
mnEnableATT = AUTO_STATE_AUTO;
mnDisablePrinting = AUTO_STATE_AUTO;
static const char* pEnv = getenv("SAL_DECIMALSEP_ENABLED" ); // set default without UI
@@ -1013,7 +965,6 @@ ImplMiscData::ImplMiscData()
ImplMiscData::ImplMiscData( const ImplMiscData& rData )
{
- mnRefCount = 1;
mnEnableATT = rData.mnEnableATT;
mnDisablePrinting = rData.mnDisablePrinting;
mbEnableLocalizedDecimalSep = rData.mbEnableLocalizedDecimalSep;
@@ -1022,49 +973,28 @@ ImplMiscData::ImplMiscData( const ImplMiscData& rData )
// -----------------------------------------------------------------------
MiscSettings::MiscSettings()
+: mpData(boost::make_shared<ImplMiscData>())
{
- mpData = new ImplMiscData();
}
// -----------------------------------------------------------------------
MiscSettings::MiscSettings( const MiscSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
-
- // copy shared instance data and increment reference counter
mpData = rSet.mpData;
- mpData->mnRefCount++;
}
// -----------------------------------------------------------------------
MiscSettings::~MiscSettings()
{
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
}
// -----------------------------------------------------------------------
const MiscSettings& MiscSettings::operator =( const MiscSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
-
- // increase reference counter first, to be able to assign oneself
- rSet.mpData->mnRefCount++;
-
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
-
mpData = rSet.mpData;
-
return *this;
}
@@ -1073,10 +1003,8 @@ const MiscSettings& MiscSettings::operator =( const MiscSettings& rSet )
void MiscSettings::CopyData()
{
// copy if other references exist
- if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplMiscData( *mpData );
+ if ( ! mpData.unique() ) {
+ mpData = boost::make_shared<ImplMiscData>(*mpData);
}
}
@@ -1251,7 +1179,6 @@ bool MiscSettings::GetEnableLocalizedDecimalSep() const
ImplHelpData::ImplHelpData()
{
- mnRefCount = 1;
mnOptions = 0;
mnTipDelay = 500;
mnTipTimeout = 3000;
@@ -1262,7 +1189,6 @@ ImplHelpData::ImplHelpData()
ImplHelpData::ImplHelpData( const ImplHelpData& rData )
{
- mnRefCount = 1;
mnOptions = rData.mnOptions;
mnTipDelay = rData.mnTipDelay;
mnTipTimeout = rData.mnTipTimeout;
@@ -1272,49 +1198,28 @@ ImplHelpData::ImplHelpData( const ImplHelpData& rData )
// -----------------------------------------------------------------------
HelpSettings::HelpSettings()
+: mpData(boost::make_shared<ImplHelpData>())
{
- mpData = new ImplHelpData();
}
// -----------------------------------------------------------------------
HelpSettings::HelpSettings( const HelpSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
-
- // copy shared instance data and increment reference counter
mpData = rSet.mpData;
- mpData->mnRefCount++;
}
// -----------------------------------------------------------------------
HelpSettings::~HelpSettings()
{
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
}
// -----------------------------------------------------------------------
const HelpSettings& HelpSettings::operator =( const HelpSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
-
- // increase reference counter first, to be able to assign oneself
- rSet.mpData->mnRefCount++;
-
- // delete data if last reference
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
-
mpData = rSet.mpData;
-
return *this;
}
@@ -1322,11 +1227,9 @@ const HelpSettings& HelpSettings::operator =( const HelpSettings& rSet )
void HelpSettings::CopyData()
{
- // copy of other references exist
- if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplHelpData( *mpData );
+ // copy if other references exist
+ if ( ! mpData.unique() ) {
+ mpData = boost::make_shared<ImplHelpData>(*mpData);
}
}
@@ -1353,7 +1256,6 @@ ImplAllSettingsData::ImplAllSettingsData()
maLocale( LANGUAGE_SYSTEM ),
maUILocale( LANGUAGE_SYSTEM )
{
- mnRefCount = 1;
mnSystemUpdate = SETTINGS_ALLSETTINGS;
mnWindowUpdate = SETTINGS_ALLSETTINGS;
mpLocaleDataWrapper = NULL;
@@ -1373,7 +1275,6 @@ ImplAllSettingsData::ImplAllSettingsData( const ImplAllSettingsData& rData ) :
maLocale( rData.maLocale ),
maUILocale( rData.maUILocale )
{
- mnRefCount = 1;
mnSystemUpdate = rData.mnSystemUpdate;
mnWindowUpdate = rData.mnWindowUpdate;
// Pointer couldn't shared and objects haven't a copy ctor
@@ -1400,51 +1301,28 @@ ImplAllSettingsData::~ImplAllSettingsData()
// -----------------------------------------------------------------------
AllSettings::AllSettings()
+: mpData(boost::make_shared<ImplAllSettingsData>())
{
-
- mpData = new ImplAllSettingsData();
}
// -----------------------------------------------------------------------
AllSettings::AllSettings( const AllSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "Settings: RefCount overflow" );
-
- // copy shared instance data and increse reference counter
mpData = rSet.mpData;
- mpData->mnRefCount++;
}
// -----------------------------------------------------------------------
AllSettings::~AllSettings()
{
-
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
}
// -----------------------------------------------------------------------
const AllSettings& AllSettings::operator =( const AllSettings& rSet )
{
- DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "AllSettings: RefCount overflow" );
-
- // increase reference counter first, to be able to assign oneself
- rSet.mpData->mnRefCount++;
-
- // if last reference then delete data
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
-
mpData = rSet.mpData;
-
return *this;
}
@@ -1452,13 +1330,11 @@ const AllSettings& AllSettings::operator =( const AllSettings& rSet )
void AllSettings::CopyData()
{
-
// copy if other references exist
- if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplAllSettingsData( *mpData );
+ if ( ! mpData.unique() ) {
+ mpData = boost::make_shared<ImplAllSettingsData>(*mpData);
}
+
}
// -----------------------------------------------------------------------
@@ -1747,4 +1623,16 @@ void AllSettings::LocaleSettingsChanged( sal_uInt32 nHint )
Application::SetSettings( aAllSettings );
}
+const StyleSettings&
+AllSettings::GetStyleSettings() const
+{
+ return mpData->maStyleSettings;
+}
+
+sal_uLong
+StyleSettings::GetOptions() const
+{
+ return mpData->mnOptions;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list