summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2011-03-04 15:29:53 -0500
committerKohei Yoshida <kyoshida@novell.com>2011-03-05 15:21:07 -0500
commitb2d3a5e2a3e5870778af63a30d7f3e6322294d06 (patch)
tree120cd8e493d79b0764b24bc8beec534f493fb85a /sc
parentac211cd143086753c82d2b28ff2de39bae902c26 (diff)
More on re-working ScRangeName.
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/document.hxx2
-rw-r--r--sc/inc/rangenam.hxx13
-rw-r--r--sc/source/core/data/documen3.cxx4
-rw-r--r--sc/source/core/tool/compiler.cxx2
-rw-r--r--sc/source/core/tool/rangenam.cxx59
-rw-r--r--sc/source/ui/miscdlgs/namepast.cxx2
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 )
{