[Libreoffice-commits] .: sc/inc sc/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Wed Feb 1 18:37:05 PST 2012
sc/inc/unitconv.hxx | 43 +++++++++-----------
sc/source/core/tool/unitconv.cxx | 82 ++++++++++++++++-----------------------
2 files changed, 55 insertions(+), 70 deletions(-)
New commits:
commit 051fb0d37a1f1c05ac5876fcfcc9a589938780e4
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 1 21:30:57 2012 -0500
Unit converter data no longer relies on StrCollection.
diff --git a/sc/inc/unitconv.hxx b/sc/inc/unitconv.hxx
index be51d3c..2b000fb 100644
--- a/sc/inc/unitconv.hxx
+++ b/sc/inc/unitconv.hxx
@@ -31,42 +31,41 @@
#include "collect.hxx"
+#include <boost/noncopyable.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
-class ScUnitConverterData : public StrData
+class ScUnitConverterData
{
- double fValue;
-
+ rtl::OUString maIndexString;
+ double mfValue;
// not implemented
- ScUnitConverterData& operator=( const ScUnitConverterData& );
+ ScUnitConverterData& operator=( const ScUnitConverterData& );
public:
- ScUnitConverterData( const String& rFromUnit,
- const String& rToUnit, double fValue = 1.0 );
- ScUnitConverterData( const ScUnitConverterData& );
- virtual ~ScUnitConverterData() {};
-
- virtual ScDataObject* Clone() const;
+ ScUnitConverterData( const rtl::OUString& rFromUnit,
+ const rtl::OUString& rToUnit, double fValue = 1.0 );
+ ScUnitConverterData( const ScUnitConverterData& );
+ ~ScUnitConverterData();
- double GetValue() const { return fValue; }
-
- static void BuildIndexString( String& rStr,
- const String& rFromUnit, const String& rToUnit );
+ double GetValue() const;
+ const rtl::OUString& GetIndexString() const;
+ static rtl::OUString BuildIndexString(
+ const rtl::OUString& rFromUnit, const rtl::OUString& rToUnit );
};
-class ScUnitConverter : public ScStrCollection
+class ScUnitConverter : public boost::noncopyable
{
- // not implemented
- ScUnitConverter( const ScUnitConverter& );
- ScUnitConverter& operator=( const ScUnitConverter& );
+ typedef boost::ptr_map<rtl::OUString, ScUnitConverterData> MapType;
+ MapType maData;
public:
- ScUnitConverter( sal_uInt16 nInit = 16, sal_uInt16 nDelta = 4 );
- virtual ~ScUnitConverter() {};
+ ScUnitConverter();
+ ~ScUnitConverter();
- sal_Bool GetValue( double& fValue, const String& rFromUnit,
- const String& rToUnit ) const;
+ bool GetValue(
+ double& fValue, const rtl::OUString& rFromUnit, const rtl::OUString& rToUnit ) const;
};
diff --git a/sc/source/core/tool/unitconv.cxx b/sc/source/core/tool/unitconv.cxx
index 9392bd8..b37379c 100644
--- a/sc/source/core/tool/unitconv.cxx
+++ b/sc/source/core/tool/unitconv.cxx
@@ -48,52 +48,36 @@ const sal_Unicode cDelim = 0x01; // Delimiter zwischen From und To
// --- ScUnitConverterData --------------------------------------------
-ScUnitConverterData::ScUnitConverterData( const String& rFromUnit,
- const String& rToUnit, double fVal )
- :
- StrData( rFromUnit ),
- fValue( fVal )
-{
- String aTmp;
- ScUnitConverterData::BuildIndexString( aTmp, rFromUnit, rToUnit );
- SetString( aTmp );
-}
+ScUnitConverterData::ScUnitConverterData(
+ const rtl::OUString& rFromUnit, const rtl::OUString& rToUnit, double fValue ) :
+ maIndexString(BuildIndexString(rFromUnit, rToUnit)),
+ mfValue(fValue) {}
+ScUnitConverterData::ScUnitConverterData( const ScUnitConverterData& r ) :
+ maIndexString(r.maIndexString),
+ mfValue(r.mfValue) {}
-ScUnitConverterData::ScUnitConverterData( const ScUnitConverterData& r )
- :
- StrData( r ),
- fValue( r.fValue )
+ScUnitConverterData::~ScUnitConverterData() {}
+
+double ScUnitConverterData::GetValue() const
{
+ return mfValue;
}
-
-ScDataObject* ScUnitConverterData::Clone() const
+const rtl::OUString& ScUnitConverterData::GetIndexString() const
{
- return new ScUnitConverterData( *this );
+ return maIndexString;
}
-
-void ScUnitConverterData::BuildIndexString( String& rStr,
- const String& rFromUnit, const String& rToUnit )
+rtl::OUString ScUnitConverterData::BuildIndexString(
+ const rtl::OUString& rFromUnit, const rtl::OUString& rToUnit )
{
-#if 1
-// case sensitive
- rStr = rFromUnit;
- rStr += cDelim;
- rStr += rToUnit;
-#else
-// not case sensitive
- rStr = rFromUnit;
- String aTo( rToUnit );
- ScGlobal::pCharClass->toUpper( rStr );
- ScGlobal::pCharClass->toUpper( aTo );
- rStr += cDelim;
- rStr += aTo;
-#endif
+ rtl::OUStringBuffer aBuf(rFromUnit);
+ aBuf.append(cDelim);
+ aBuf.append(rToUnit);
+ return aBuf.makeStringAndClear();
}
-
// --- ScUnitConverter ------------------------------------------------
#define CFGPATH_UNIT "Office.Calc/UnitConversion"
@@ -101,8 +85,7 @@ void ScUnitConverterData::BuildIndexString( String& rStr,
#define CFGSTR_UNIT_TO "ToUnit"
#define CFGSTR_UNIT_FACTOR "Factor"
-ScUnitConverter::ScUnitConverter( sal_uInt16 nInit, sal_uInt16 nDeltaP ) :
- ScStrCollection( nInit, nDeltaP, false )
+ScUnitConverter::ScUnitConverter()
{
// read from configuration - "convert.ini" is no longer used
//! config item as member to allow change of values
@@ -153,25 +136,28 @@ ScUnitConverter::ScUnitConverter( sal_uInt16 nInit, sal_uInt16 nDeltaP ) :
pProperties[nIndex++] >>= fFactor;
ScUnitConverterData* pNew = new ScUnitConverterData( sFromUnit, sToUnit, fFactor );
- if ( !Insert( pNew ) )
- delete pNew;
+ rtl::OUString aIndex = pNew->GetIndexString();
+ maData.insert(aIndex, pNew);
}
}
}
}
-sal_Bool ScUnitConverter::GetValue( double& fValue, const String& rFromUnit,
- const String& rToUnit ) const
+ScUnitConverter::~ScUnitConverter() {}
+
+bool ScUnitConverter::GetValue(
+ double& fValue, const rtl::OUString& rFromUnit, const rtl::OUString& rToUnit ) const
{
- ScUnitConverterData aSearch( rFromUnit, rToUnit );
- sal_uInt16 nIndex;
- if ( Search( &aSearch, nIndex ) )
+ rtl::OUString aIndex = ScUnitConverterData::BuildIndexString(rFromUnit, rToUnit);
+ MapType::const_iterator it = maData.find(aIndex);
+ if (it == maData.end())
{
- fValue = ((const ScUnitConverterData*)(At( nIndex )))->GetValue();
- return sal_True;
+ fValue = 1.0;
+ return false;
}
- fValue = 1.0;
- return false;
+
+ fValue = it->second->GetValue();
+ return true;
}
More information about the Libreoffice-commits
mailing list