editeng/source/editeng/editobj.cxx | 21 +++++++++++++++++++++ editeng/source/editeng/editobj2.hxx | 10 ++++++++++ include/editeng/editobj.hxx | 13 +++++++++++++ include/svl/stringpool.hxx | 34 ++++++++++++++++++++++++++++++++++ sc/inc/formulagroup.hxx | 7 +++---- sc/source/core/data/column2.cxx | 8 ++++---- sc/source/core/tool/formulagroup.cxx | 17 ----------------- svl/Library_svl.mk | 1 + svl/source/misc/stringpool.cxx | 35 +++++++++++++++++++++++++++++++++++ 9 files changed, 121 insertions(+), 25 deletions(-)
New commits: commit 19f7989c1689b009d1cd15e88d2b5386ee23165c Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Oct 1 21:51:50 2013 -0400 Add method to normalize strings in EditTextObject. Change-Id: I1adb57279db0afeb8387599ec11984380e5a2e4a diff --git a/editeng/source/editeng/editobj.cxx b/editeng/source/editeng/editobj.cxx index 8e35a57..aaf5e5f 100644 --- a/editeng/source/editeng/editobj.cxx +++ b/editeng/source/editeng/editobj.cxx @@ -44,6 +44,7 @@ #include <vcl/graph.hxx> #include <svl/intitem.hxx> +#include "svl/stringpool.hxx" #include <unotools/fontcvt.hxx> #include <tools/tenccvt.hxx> @@ -148,6 +149,11 @@ ContentInfo::~ContentInfo() aAttribs.clear(); } +void ContentInfo::NormalizeString( svl::StringPool& rPool ) +{ + aText = OUString(rPool.intern(aText)); +} + const WrongList* ContentInfo::GetWrongList() const { return mpWrongs.get(); @@ -316,6 +322,11 @@ editeng::FieldUpdater EditTextObject::GetFieldUpdater() return mpImpl->GetFieldUpdater(); } +void EditTextObject::NormalizeString( svl::StringPool& rPool ) +{ + mpImpl->NormalizeString(rPool); +} + const SfxItemPool* EditTextObject::GetPool() const { return mpImpl->GetPool(); @@ -602,6 +613,16 @@ void EditTextObjectImpl::SetUserType( sal_uInt16 n ) nUserType = n; } +void EditTextObjectImpl::NormalizeString( svl::StringPool& rPool ) +{ + ContentInfosType::iterator it = aContents.begin(), itEnd = aContents.end(); + for (; it != itEnd; ++it) + { + ContentInfo& rInfo = *it; + rInfo.NormalizeString(rPool); + } +} + bool EditTextObjectImpl::IsVertical() const { return bVertical; diff --git a/editeng/source/editeng/editobj2.hxx b/editeng/source/editeng/editobj2.hxx index b704e48..c331134 100644 --- a/editeng/source/editeng/editobj2.hxx +++ b/editeng/source/editeng/editobj2.hxx @@ -35,6 +35,12 @@ struct Section; } +namespace svl { + +class StringPool; + +} + class XEditAttribute { private: @@ -136,6 +142,8 @@ private: public: ~ContentInfo(); + void NormalizeString( svl::StringPool& rPool ); + const XEditAttributesType& GetAttribs() const { return aAttribs; } XEditAttributesType& GetAttribs() { return aAttribs; } @@ -198,6 +206,8 @@ public: sal_uInt16 GetUserType() const; void SetUserType( sal_uInt16 n ); + void NormalizeString( svl::StringPool& rPool ); + bool IsVertical() const; void SetVertical( bool b ); diff --git a/include/editeng/editobj.hxx b/include/editeng/editobj.hxx index cdb8fbb..36392e2 100644 --- a/include/editeng/editobj.hxx +++ b/include/editeng/editobj.hxx @@ -49,6 +49,12 @@ struct Section; } +namespace svl { + +class StringPool; + +} + class EditTextObjectImpl; class EDITENG_DLLPUBLIC EditTextObject : public SfxItemPoolUser @@ -72,6 +78,13 @@ public: EditTextObject( const EditTextObject& r ); virtual ~EditTextObject(); + /** + * Set paragraph strings to the shared string pool. + * + * @param rPool shared string pool. + */ + void NormalizeString( svl::StringPool& rPool ); + const SfxItemPool* GetPool() const; sal_uInt16 GetUserType() const; // For OutlinerMode, it can however not save in compatible format void SetUserType( sal_uInt16 n ); commit 703f13ca8545271c5b4265d4e9ff18f751f30d9f Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Oct 1 20:57:56 2013 -0400 Move this string pool code to svl. Change-Id: I1379fbc377607be8831133d64db2e14f8c75bff8 diff --git a/include/svl/stringpool.hxx b/include/svl/stringpool.hxx new file mode 100644 index 0000000..643c846 --- /dev/null +++ b/include/svl/stringpool.hxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef SVL_STRINGPOOL_HXX +#define SVL_STRINGPOOL_HXX + +#include "svl/svldllapi.h" +#include "rtl/ustring.hxx" + +#include <boost/unordered_set.hpp> + +namespace svl { + +class SVL_DLLPUBLIC StringPool +{ + typedef boost::unordered_set<OUString, OUStringHash> StrHashType; + StrHashType maStrPool; +public: + StringPool(); + + rtl_uString* intern( const OUString& rStr ); +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/formulagroup.hxx b/sc/inc/formulagroup.hxx index e7c13cd..a8d20bb 100644 --- a/sc/inc/formulagroup.hxx +++ b/sc/inc/formulagroup.hxx @@ -14,6 +14,8 @@ #include "types.hxx" #include "platforminfo.hxx" +#include "svl/stringpool.hxx" + #include <vector> #include <boost/noncopyable.hpp> #include <boost/ptr_container/ptr_vector.hpp> @@ -26,17 +28,14 @@ namespace sc { struct FormulaGroupContext : boost::noncopyable { - typedef boost::unordered_set<OUString, OUStringHash> StrHashType; typedef std::vector<double> NumArrayType; typedef std::vector<rtl_uString*> StrArrayType; typedef boost::ptr_vector<NumArrayType> NumArrayStoreType; typedef boost::ptr_vector<StrArrayType> StrArrayStoreType; - StrHashType maStrPool; + svl::StringPool maStrPool; NumArrayStoreType maNumArrays; StrArrayStoreType maStrArrays; - - rtl_uString* intern( const OUString& rStr ); }; /** diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index eda83ff..9601583 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -2174,7 +2174,7 @@ bool appendStrings( getBlockIterators<sc::string_block>(it, nLenRemain, itData, itDataEnd); for (; itData != itDataEnd; ++itData) - rArray.push_back(rCxt.intern(*itData)); + rArray.push_back(rCxt.maStrPool.intern(*itData)); } break; case sc::element_type_edittext: @@ -2185,7 +2185,7 @@ bool appendStrings( for (; itData != itDataEnd; ++itData) { OUString aStr = ScEditUtil::GetString(**itData, pDoc); - rArray.push_back(rCxt.intern(aStr)); + rArray.push_back(rCxt.maStrPool.intern(aStr)); } } break; @@ -2210,7 +2210,7 @@ bool appendStrings( return false; } - rArray.push_back(rCxt.intern(aStr)); + rArray.push_back(rCxt.maStrPool.intern(aStr)); } } break; @@ -2250,7 +2250,7 @@ void copyFirstBlock( sc::FormulaGroupContext& rCxt, size_t nLen, const sc::CellS const OUString* p = &sc::string_block::at(*rPos.first->data, rPos.second); const OUString* pEnd = p + nLen; for (; p != pEnd; ++p) - rArray.push_back(rCxt.intern(*p)); + rArray.push_back(rCxt.maStrPool.intern(*p)); } } diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx index 677ac9f..98ae0b4 100644 --- a/sc/source/core/tool/formulagroup.cxx +++ b/sc/source/core/tool/formulagroup.cxx @@ -38,23 +38,6 @@ extern "C" void compileOpenCLKernels(const OUString*); namespace sc { -rtl_uString* FormulaGroupContext::intern( const OUString& rStr ) -{ - StrHashType::iterator it = maStrPool.find(rStr); - if (it == maStrPool.end()) - { - // Not yet in the pool. - std::pair<StrHashType::iterator, bool> r = maStrPool.insert(rStr.intern()); - if (!r.second) - // Insertion failed. - return NULL; - - it = r.first; - } - - return it->pData; -} - namespace { /** diff --git a/svl/Library_svl.mk b/svl/Library_svl.mk index 277be91..eddabf0 100644 --- a/svl/Library_svl.mk +++ b/svl/Library_svl.mk @@ -110,6 +110,7 @@ $(eval $(call gb_Library_add_exception_objects,svl,\ svl/source/misc/lockfilecommon \ svl/source/misc/ownlist \ svl/source/misc/sharecontrolfile \ + svl/source/misc/stringpool \ svl/source/misc/strmadpt \ svl/source/misc/urihelper \ svl/source/notify/brdcst \ diff --git a/svl/source/misc/stringpool.cxx b/svl/source/misc/stringpool.cxx new file mode 100644 index 0000000..f8ddda9 --- /dev/null +++ b/svl/source/misc/stringpool.cxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "svl/stringpool.hxx" + +namespace svl { + +StringPool::StringPool() {} + +rtl_uString* StringPool::intern( const OUString& rStr ) +{ + StrHashType::iterator it = maStrPool.find(rStr); + if (it == maStrPool.end()) + { + // Not yet in the pool. + std::pair<StrHashType::iterator, bool> r = maStrPool.insert(rStr.intern()); + if (!r.second) + // Insertion failed. + return NULL; + + it = r.first; + } + + return it->pData; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits