diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2011-03-04 15:29:53 -0500 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2011-03-05 15:21:07 -0500 |
commit | b2d3a5e2a3e5870778af63a30d7f3e6322294d06 (patch) | |
tree | 120cd8e493d79b0764b24bc8beec534f493fb85a /sc | |
parent | ac211cd143086753c82d2b28ff2de39bae902c26 (diff) |
More on re-working ScRangeName.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/document.hxx | 2 | ||||
-rw-r--r-- | sc/inc/rangenam.hxx | 13 | ||||
-rw-r--r-- | sc/source/core/data/documen3.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/rangenam.cxx | 59 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/namepast.cxx | 2 |
6 files changed, 69 insertions, 13 deletions
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index aa4c5d4252cd..ae8ef78ce9d7 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -481,7 +481,7 @@ public: BOOL bStartOnly = FALSE) const; ScDBData* GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const; - SC_DLLPUBLIC ScRangeData* GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const; + SC_DLLPUBLIC const ScRangeData* GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const; SC_DLLPUBLIC ScDPCollection* GetDPCollection(); ScDPObject* GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const; diff --git a/sc/inc/rangenam.hxx b/sc/inc/rangenam.hxx index b7e183cc2c72..b81f9fb28ec4 100644 --- a/sc/inc/rangenam.hxx +++ b/sc/inc/rangenam.hxx @@ -36,7 +36,7 @@ #include "scdllapi.h" #include <map> -#include <boost/ptr_container/ptr_map.hpp> +#include <boost/ptr_container/ptr_set.hpp> //------------------------------------------------------------------------ @@ -177,12 +177,14 @@ extern "C" int SAL_CALL ScRangeData_QsortNameCompare( const void*, const void* ) #define NEW_RANGE_NAME 1 +bool operator< (const ScRangeData& left, const ScRangeData& right); + #if NEW_RANGE_NAME class ScRangeName { private: - typedef ::boost::ptr_map<rtl::OUString, ScRangeData> DataType; + typedef ::boost::ptr_set<ScRangeData> DataType; DataType maData; ScDocument* mpDoc; @@ -191,9 +193,12 @@ public: ScRangeName(ScDocument* pDoc = NULL); ScRangeName(const ScRangeName& r); - SC_DLLPUBLIC ScRangeData* operator[](sal_uInt16 nIndex) const; - SC_DLLPUBLIC ScRangeData* GetRangeAtBlock(const ScRange& rRange) const; + SC_DLLPUBLIC ScRangeData* operator[](sal_uInt16 nIndex); + SC_DLLPUBLIC const ScRangeData* operator[](sal_uInt16 nIndex) const; + SC_DLLPUBLIC const ScRangeData* GetRangeAtBlock(const ScRange& rRange) const; SC_DLLPUBLIC bool SearchName(const rtl::OUString& rName, sal_uInt16& rPos) const; + SC_DLLPUBLIC const ScRangeData* findByName(const rtl::OUString& rName) const; + const ScRangeData* findByUpperName(const rtl::OUString& rName) const; bool SearchNameUpper(const rtl::OUString& rUpperName, sal_uInt16& rPos) const; void UpdateReference(UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz); diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index f95192f2b547..446389379b46 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -103,9 +103,9 @@ void ScDocument::SetRangeName( ScRangeName* pNewRangeName ) } -ScRangeData* ScDocument::GetRangeAtBlock( const ScRange& rBlock, String* pName ) const +const ScRangeData* ScDocument::GetRangeAtBlock( const ScRange& rBlock, String* pName ) const { - ScRangeData* pData = NULL; + const ScRangeData* pData = NULL; if ( pRangeName ) { pData = pRangeName->GetRangeAtBlock( rBlock ); diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 5235f09d7680..c822039778e6 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -2900,7 +2900,7 @@ BOOL ScCompiler::IsNamedRange( const String& rUpperName ) ScRangeName* pRangeName = pDoc->GetRangeName(); if (pRangeName->SearchNameUpper( rUpperName, n ) ) { - ScRangeData* pData = (*pRangeName)[n]; + const ScRangeData* pData = (*pRangeName)[n]; ScRawToken aToken; aToken.SetName( pData->GetIndex() ); pRawToken = aToken.Clone(); diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx index eac22ececbc7..5f265bfb3774 100644 --- a/sc/source/core/tool/rangenam.cxx +++ b/sc/source/core/tool/rangenam.cxx @@ -658,27 +658,67 @@ ScRangeData_QsortNameCompare( const void* p1, const void* p2 ) #if NEW_RANGE_NAME +bool operator<(const ScRangeData& left, const ScRangeData& right) +{ + return left.GetName() < right.GetName(); +} + ScRangeName::ScRangeName(ScDocument* pDoc) : mpDoc(pDoc) {} ScRangeName::ScRangeName(const ScRangeName& r) : maData(r.maData), mpDoc(r.mpDoc) {} -ScRangeData* ScRangeName::operator[](sal_uInt16 nIndex) const +ScRangeData* ScRangeName::operator[](sal_uInt16 nIndex) { return NULL; } -ScRangeData* ScRangeName::GetRangeAtBlock(const ScRange& rRange) const +const ScRangeData* ScRangeName::operator[](sal_uInt16 nIndex) const { return NULL; } +const ScRangeData* ScRangeName::GetRangeAtBlock(const ScRange& rRange) const +{ + DataType::const_iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + { + if (itr->IsRangeAtBlock(rRange)) + return &(*itr); + } + return NULL; +} + bool ScRangeName::SearchName(const rtl::OUString& rName, sal_uInt16& rPos) const { return false; } +const ScRangeData* ScRangeName::findByName(const OUString& rName) const +{ + DataType::const_iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + { + String aName; + itr->GetName(aName); + if (rName.equals(aName)) + return &(*itr); + } + return NULL; +} + +const ScRangeData* ScRangeName::findByUpperName(const OUString& rName) const +{ + DataType::const_iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + { + if (rName.equals(itr->GetUpperName())) + return &(*itr); + } + return NULL; +} + bool ScRangeName::SearchNameUpper(const rtl::OUString& rName, sal_uInt16& rPos) const { return false; @@ -687,18 +727,30 @@ bool ScRangeName::SearchNameUpper(const rtl::OUString& rName, sal_uInt16& rPos) void ScRangeName::UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz) { + DataType::iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + itr->UpdateReference(eUpdateRefMode, rRange, nDx, nDy, nDz); } void ScRangeName::UpdateTabRef(SCTAB nTable, sal_uInt16 nFlag, SCTAB nNewTable) { + DataType::iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + itr->UpdateTabRef(nTable, nFlag, nNewTable); } void ScRangeName::UpdateTranspose(const ScRange& rSource, const ScAddress& rDest) { + DataType::iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + itr->UpdateTranspose(rSource, rDest); } void ScRangeName::UpdateGrow(const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY) { + DataType::iterator itr = maData.begin(), itrEnd = maData.end(); + for (; itr != itrEnd; ++itr) + itr->UpdateGrow(rArea, nGrowX, nGrowY); } ScRangeData* ScRangeName::FindIndex(size_t i) @@ -731,8 +783,7 @@ bool ScRangeName::Insert(ScRangeData* p) if (!p) return false; - OUString aName = p->GetName(); - pair<DataType::iterator, bool> r = maData.insert(aName, p); + pair<DataType::iterator, bool> r = maData.insert(p); return r.second; } diff --git a/sc/source/ui/miscdlgs/namepast.cxx b/sc/source/ui/miscdlgs/namepast.cxx index 6e5baea3ed42..ef573132e6a9 100644 --- a/sc/source/ui/miscdlgs/namepast.cxx +++ b/sc/source/ui/miscdlgs/namepast.cxx @@ -65,7 +65,7 @@ ScNamePasteDlg::ScNamePasteDlg( Window * pParent, const ScRangeName* pList, BOOL for( USHORT i=0 ; i<nCnt ; i++ ) { - ScRangeData* pData = (*pList)[ i ]; + const ScRangeData* pData = (*pList)[ i ]; if( pData ) { |