comphelper/inc/comphelper/string.hxx | 3 ++ comphelper/source/misc/string.cxx | 12 ++++++++++ sc/inc/dptabres.hxx | 36 +++++++++++++++--------------- sc/source/core/data/dptabres.cxx | 42 ++++++++++++++++------------------- sc/source/core/data/dptabsrc.cxx | 12 +++++----- 5 files changed, 59 insertions(+), 46 deletions(-)
New commits: commit e786e2d25ab0105e88d7ca260c7ef4a88c9b821c Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Tue Nov 15 02:02:14 2011 -0500 String to rtl::OUString. diff --git a/comphelper/inc/comphelper/string.hxx b/comphelper/inc/comphelper/string.hxx index 4545302..620db1b 100644 --- a/comphelper/inc/comphelper/string.hxx +++ b/comphelper/inc/comphelper/string.hxx @@ -352,6 +352,9 @@ COMPHELPER_DLLPUBLIC inline rtl::OUStringBuffer& padToLength( return detail::padToLength(rBuffer, nLength, cFill); } +COMPHELPER_DLLPUBLIC rtl::OUString removeTrailingChars( + const rtl::OUString& rStr, sal_Unicode cChar); + /** Convert a sequence of strings to a single comma separated string. Note that no escaping of commas or anything fancy is done. diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx index 873a1ff..6f59564 100644 --- a/comphelper/source/misc/string.cxx +++ b/comphelper/source/misc/string.cxx @@ -235,6 +235,18 @@ sal_uInt32 decimalStringToNumber( return result; } +rtl::OUString removeTrailingChars(const rtl::OUString& rStr, sal_Unicode cChar) +{ + sal_Int32 n = rStr.getLength(); + const sal_Unicode* p = &rStr.getStr()[n-1]; // last char + while (n > 0 && *p == cChar) + { + --p; + --n; + } + return rStr.copy(0, n); +} + using namespace ::com::sun::star; // convert between sequence of string and comma separated string diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index b8a2414..2c92f22 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -299,7 +299,7 @@ private: ScSubTotalFunc* pMeasFuncs; ::com::sun::star::sheet::DataPilotFieldReference* pMeasRefs; sal_uInt16* pMeasRefOrient; - std::vector<String> maMeasureNames; + std::vector<rtl::OUString> maMeasureNames; bool bLateInit:1; bool bDataAtCol:1; bool bDataAtRow:1; @@ -312,7 +312,7 @@ public: void SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, const ::com::sun::star::sheet::DataPilotFieldReference* pRefs, - const sal_uInt16* pRefOrient, std::vector<String>& rNames ); + const sal_uInt16* pRefOrient, std::vector<rtl::OUString>& rNames ); void SetDataLayoutOrientation( sal_uInt16 nOrient ); void SetLateInit( bool bSet ); diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index b7c5e0a..62feb0b 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -786,7 +786,7 @@ ScDPResultData::~ScDPResultData() void ScDPResultData::SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, const sheet::DataPilotFieldReference* pRefs, const sal_uInt16* pRefOrient, - std::vector<String>& rNames ) + std::vector<rtl::OUString>& rNames ) { delete[] pMeasFuncs; delete[] pMeasRefs; @@ -815,7 +815,7 @@ void ScDPResultData::SetMeasureData( long nCount, const ScSubTotalFunc* pFunctio pMeasRefs = new sheet::DataPilotFieldReference[1]; // default ctor is ok pMeasRefOrient = new sal_uInt16[1]; pMeasRefOrient[0] = sheet::DataPilotFieldOrientation_HIDDEN; - std::vector<String> aMeasureName; + std::vector<rtl::OUString> aMeasureName; aMeasureName.push_back(ScGlobal::GetRscString(STR_EMPTYDATA)); maMeasureNames.swap(aMeasureName); } @@ -887,18 +887,18 @@ String ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotalFu if (pLayoutName) return *pLayoutName; } - String aRet; + rtl::OUStringBuffer aRet; ScSubTotalFunc eFunc = ( eForceFunc == SUBTOTAL_FUNC_NONE ) ? GetMeasureFunction(nMeasure) : eForceFunc; sal_uInt16 nId = nFuncStrIds[eFunc]; if (nId) { - aRet += ScGlobal::GetRscString(nId); // function name - aRet.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " - " )); + aRet.append(ScGlobal::GetRscString(nId)); // function name + aRet.appendAscii(RTL_CONSTASCII_STRINGPARAM(" - ")); } - aRet += maMeasureNames[nMeasure]; // field name + aRet.append(maMeasureNames[nMeasure]); // field name - return aRet; + return aRet.makeStringAndClear(); } } diff --git a/sc/source/core/data/dptabsrc.cxx b/sc/source/core/data/dptabsrc.cxx index 008ea39..b0ac477 100644 --- a/sc/source/core/data/dptabsrc.cxx +++ b/sc/source/core/data/dptabsrc.cxx @@ -69,6 +69,7 @@ #include <com/sun/star/sheet/DataPilotFieldAutoShowInfo.hpp> #include <com/sun/star/table/CellAddress.hpp> +#include "comphelper/string.hxx" #include <unotools/collatorwrapper.hxx> #include <unotools/calendarwrapper.hxx> #include <com/sun/star/i18n/CalendarDisplayIndex.hpp> @@ -792,7 +793,7 @@ void ScDPSource::CreateRes_Impl() // TODO: Aggreate pDataNames, pDataRefValues, nDataRefOrient, and // eDataFunctions into a structure and use vector instead of static // or pointer arrays. - vector<String> aDataNames; + vector<rtl::OUString> aDataNames; sheet::DataPilotFieldReference* pDataRefValues = NULL; ScSubTotalFunc eDataFunctions[SC_DAPI_MAXFIELDS]; sal_uInt16 nDataRefOrient[SC_DAPI_MAXFIELDS]; @@ -854,7 +855,7 @@ void ScDPSource::CreateRes_Impl() // asterisk is added to duplicated dimension names by ScDPSaveData::WriteToSource //! modify user visible strings as in ScDPResultData::GetMeasureString instead! - aDataNames[i].EraseTrailingChars('*'); + aDataNames[i] = comphelper::string::removeTrailingChars(aDataNames[i], '*'); //! if the name is overridden by user, a flag must be set //! so the user defined name replaces the function string and field name. commit 35054d3f6213c11546200820c706c8a1527ec605 Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Tue Nov 15 01:31:34 2011 -0500 Replaced heap array with std::vector. diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index aedb6f7..b8a2414 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -299,7 +299,7 @@ private: ScSubTotalFunc* pMeasFuncs; ::com::sun::star::sheet::DataPilotFieldReference* pMeasRefs; sal_uInt16* pMeasRefOrient; - String* pMeasNames; + std::vector<String> maMeasureNames; bool bLateInit:1; bool bDataAtCol:1; bool bDataAtRow:1; @@ -312,7 +312,7 @@ public: void SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, const ::com::sun::star::sheet::DataPilotFieldReference* pRefs, - const sal_uInt16* pRefOrient, const String* pNames ); + const sal_uInt16* pRefOrient, std::vector<String>& rNames ); void SetDataLayoutOrientation( sal_uInt16 nOrient ); void SetLateInit( bool bSet ); diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index 3f18da1..b7c5e0a 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -767,7 +767,6 @@ ScDPResultData::ScDPResultData( ScDPSource* pSrc ) : //! Ref pMeasFuncs( NULL ), pMeasRefs( NULL ), pMeasRefOrient( NULL ), - pMeasNames( NULL ), bLateInit( false ), bDataAtCol( false ), bDataAtRow( false ) @@ -781,32 +780,30 @@ ScDPResultData::~ScDPResultData() delete[] pMeasFuncs; delete[] pMeasRefs; delete[] pMeasRefOrient; - delete[] pMeasNames; lcl_ResizePointVector( mpDimMembers , 0 ); } void ScDPResultData::SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, const sheet::DataPilotFieldReference* pRefs, const sal_uInt16* pRefOrient, - const String* pNames ) + std::vector<String>& rNames ) { delete[] pMeasFuncs; delete[] pMeasRefs; delete[] pMeasRefOrient; - delete[] pMeasNames; if ( nCount ) { + OSL_ASSERT(nCount == static_cast<long>(rNames.size())); nMeasCount = nCount; pMeasFuncs = new ScSubTotalFunc[nCount]; pMeasRefs = new sheet::DataPilotFieldReference[nCount]; pMeasRefOrient = new sal_uInt16[nCount]; - pMeasNames = new String[nCount]; + maMeasureNames.swap(rNames); for (long i=0; i<nCount; i++) { pMeasFuncs[i] = pFunctions[i]; pMeasRefs[i] = pRefs[i]; pMeasRefOrient[i] = pRefOrient[i]; - pMeasNames[i] = pNames[i]; } } else @@ -818,8 +815,9 @@ void ScDPResultData::SetMeasureData( long nCount, const ScSubTotalFunc* pFunctio pMeasRefs = new sheet::DataPilotFieldReference[1]; // default ctor is ok pMeasRefOrient = new sal_uInt16[1]; pMeasRefOrient[0] = sheet::DataPilotFieldOrientation_HIDDEN; - pMeasNames = new String[1]; - pMeasNames[0] = ScGlobal::GetRscString( STR_EMPTYDATA ); + std::vector<String> aMeasureName; + aMeasureName.push_back(ScGlobal::GetRscString(STR_EMPTYDATA)); + maMeasureNames.swap(aMeasureName); } } @@ -881,7 +879,7 @@ String ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotalFu } else { - OSL_ENSURE( pMeasNames && nMeasure < nMeasCount, "bumm" ); + OSL_ENSURE( nMeasure < nMeasCount, "bumm" ); ScDPDimension* pDataDim = pSource->GetDataDimension(nMeasure); if (pDataDim) { @@ -898,7 +896,7 @@ String ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotalFu aRet += ScGlobal::GetRscString(nId); // function name aRet.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " - " )); } - aRet += pMeasNames[nMeasure]; // field name + aRet += maMeasureNames[nMeasure]; // field name return aRet; } diff --git a/sc/source/core/data/dptabsrc.cxx b/sc/source/core/data/dptabsrc.cxx index 545109a..008ea39 100644 --- a/sc/source/core/data/dptabsrc.cxx +++ b/sc/source/core/data/dptabsrc.cxx @@ -792,13 +792,13 @@ void ScDPSource::CreateRes_Impl() // TODO: Aggreate pDataNames, pDataRefValues, nDataRefOrient, and // eDataFunctions into a structure and use vector instead of static // or pointer arrays. - String* pDataNames = NULL; + vector<String> aDataNames; sheet::DataPilotFieldReference* pDataRefValues = NULL; ScSubTotalFunc eDataFunctions[SC_DAPI_MAXFIELDS]; sal_uInt16 nDataRefOrient[SC_DAPI_MAXFIELDS]; if (nDataDimCount) { - pDataNames = new String[nDataDimCount]; + aDataNames.resize(nDataDimCount); pDataRefValues = new sheet::DataPilotFieldReference[nDataDimCount]; } @@ -849,12 +849,12 @@ void ScDPSource::CreateRes_Impl() } } - pDataNames[i] = String( pDim->getName() ); //! label? + aDataNames[i] = pDim->getName(); // asterisk is added to duplicated dimension names by ScDPSaveData::WriteToSource //! modify user visible strings as in ScDPResultData::GetMeasureString instead! - pDataNames[i].EraseTrailingChars('*'); + aDataNames[i].EraseTrailingChars('*'); //! if the name is overridden by user, a flag must be set //! so the user defined name replaces the function string and field name. @@ -869,11 +869,10 @@ void ScDPSource::CreateRes_Impl() } pResData = new ScDPResultData( this ); - pResData->SetMeasureData( nDataDimCount, eDataFunctions, pDataRefValues, nDataRefOrient, pDataNames ); + pResData->SetMeasureData( nDataDimCount, eDataFunctions, pDataRefValues, nDataRefOrient, aDataNames ); pResData->SetDataLayoutOrientation(nDataOrient); pResData->SetLateInit( bLateInit ); - delete[] pDataNames; delete[] pDataRefValues; bool bHasAutoShow = false; commit 13e09805f5058b6fcf700f566ea7935474dd9310 Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Tue Nov 15 01:14:11 2011 -0500 sal_Bool to bool. diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index 4e6c6ed..aedb6f7 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -300,12 +300,12 @@ private: ::com::sun::star::sheet::DataPilotFieldReference* pMeasRefs; sal_uInt16* pMeasRefOrient; String* pMeasNames; - sal_Bool bLateInit; - sal_Bool bDataAtCol; - sal_Bool bDataAtRow; + bool bLateInit:1; + bool bDataAtCol:1; + bool bDataAtRow:1; //! add "displayed values" settings - mutable std::vector< ResultMembers* > mpDimMembers; + mutable std::vector< ResultMembers* > mpDimMembers; public: ScDPResultData( ScDPSource* pSrc ); //! Ref ~ScDPResultData(); @@ -314,18 +314,18 @@ public: const ::com::sun::star::sheet::DataPilotFieldReference* pRefs, const sal_uInt16* pRefOrient, const String* pNames ); void SetDataLayoutOrientation( sal_uInt16 nOrient ); - void SetLateInit( sal_Bool bSet ); + void SetLateInit( bool bSet ); long GetMeasureCount() const { return nMeasCount; } ScSubTotalFunc GetMeasureFunction(long nMeasure) const; - String GetMeasureString(long nMeasure, sal_Bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const; + String GetMeasureString(long nMeasure, bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const; String GetMeasureDimensionName(long nMeasure) const; const ::com::sun::star::sheet::DataPilotFieldReference& GetMeasureRefVal(long nMeasure) const; sal_uInt16 GetMeasureRefOrient(long nMeasure) const; - sal_Bool IsDataAtCol() const { return bDataAtCol; } - sal_Bool IsDataAtRow() const { return bDataAtRow; } - sal_Bool IsLateInit() const { return bLateInit; } + bool IsDataAtCol() const { return bDataAtCol; } + bool IsDataAtRow() const { return bDataAtRow; } + bool IsLateInit() const { return bLateInit; } long GetColStartMeasure() const; long GetRowStartMeasure() const; @@ -333,14 +333,14 @@ public: long GetCountForMeasure( long nMeas ) const { return ( nMeas == SC_DPMEASURE_ALL ) ? nMeasCount : 1; } - sal_Bool IsBaseForGroup( long nDim ) const; // any group + bool IsBaseForGroup( long nDim ) const; // any group long GetGroupBase( long nGroupDim ) const; - sal_Bool IsNumOrDateGroup( long nDim ) const; - sal_Bool IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex, - long nBaseDataId, long nBaseIndex ) const; - sal_Bool IsInGroup( SCROW nGroupDataId, long nGroupIndex, - const ScDPItemData& rBaseData, long nBaseIndex ) const; - sal_Bool HasCommonElement( SCROW nFirstDataId, long nFirstIndex, + bool IsNumOrDateGroup( long nDim ) const; + bool IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex, + long nBaseDataId, long nBaseIndex ) const; + bool IsInGroup( SCROW nGroupDataId, long nGroupIndex, + const ScDPItemData& rBaseData, long nBaseIndex ) const; + bool HasCommonElement( SCROW nFirstDataId, long nFirstIndex, const ScDPItemData& rSecondData, long nSecondIndex ) const; ResultMembers* GetDimResultMembers( long nDim , ScDPDimension* pDim , ScDPLevel* pLevel) const ; diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index c1a1824..3f18da1 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -829,7 +829,7 @@ void ScDPResultData::SetDataLayoutOrientation( sal_uInt16 nOrient ) bDataAtRow = ( nOrient == sheet::DataPilotFieldOrientation_ROW ); } -void ScDPResultData::SetLateInit( sal_Bool bSet ) +void ScDPResultData::SetLateInit( bool bSet ) { bLateInit = bSet; } @@ -864,7 +864,7 @@ sal_uInt16 ScDPResultData::GetMeasureRefOrient(long nMeasure) const return pMeasRefOrient[nMeasure]; } -String ScDPResultData::GetMeasureString(long nMeasure, sal_Bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const +String ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const { // with bForce==sal_True, return function instead of "result" for single measure // with eForceFunc != SUBTOTAL_FUNC_NONE, always use eForceFunc @@ -915,7 +915,7 @@ String ScDPResultData::GetMeasureDimensionName(long nMeasure) const return pSource->GetDataDimName( nMeasure ); } -sal_Bool ScDPResultData::IsBaseForGroup( long nDim ) const +bool ScDPResultData::IsBaseForGroup( long nDim ) const { return pSource->GetData()->IsBaseForGroup( nDim ); } @@ -925,12 +925,12 @@ long ScDPResultData::GetGroupBase( long nGroupDim ) const return pSource->GetData()->GetGroupBase( nGroupDim ); } -sal_Bool ScDPResultData::IsNumOrDateGroup( long nDim ) const +bool ScDPResultData::IsNumOrDateGroup( long nDim ) const { return pSource->GetData()->IsNumOrDateGroup( nDim ); } -sal_Bool ScDPResultData::IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex, +bool ScDPResultData::IsInGroup( const ScDPItemData& rGroupData, long nGroupIndex, long nBaseDataId, long nBaseIndex ) const { const ScDPItemData* pData = pSource->GetItemDataById( nGroupIndex , nBaseDataId); @@ -939,8 +939,8 @@ sal_Bool ScDPResultData::IsInGroup( const ScDPItemData& rGroupData, long nGroupI else return false; } -sal_Bool ScDPResultData::IsInGroup( SCROW nGroupDataId, long nGroupIndex, - const ScDPItemData& rBaseData, long nBaseIndex ) const +bool ScDPResultData::IsInGroup( SCROW nGroupDataId, long nGroupIndex, + const ScDPItemData& rBaseData, long nBaseIndex ) const { const ScDPItemData* pGroupData = pSource->GetItemDataById( nGroupIndex , nGroupDataId); if ( pGroupData ) @@ -949,7 +949,7 @@ sal_Bool ScDPResultData::IsInGroup( SCROW nGroupDataId, long nGroupIndex, return false; } -sal_Bool ScDPResultData::HasCommonElement(/* const ScDPItemData& rFirstData*/SCROW nFirstDataId, long nFirstIndex, +bool ScDPResultData::HasCommonElement( SCROW nFirstDataId, long nFirstIndex, const ScDPItemData& rSecondData, long nSecondIndex ) const { const ScDPItemData* pFirstData = pSource->GetItemDataById( nFirstIndex , nFirstDataId); _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits