sc/inc/externalrefmgr.hxx                |   10 +++++++--
 sc/source/ui/docshell/externalrefmgr.cxx |   32 +++++++++++++++++++++++++++----
 2 files changed, 36 insertions(+), 6 deletions(-)

New commits:
commit 6267a995ea5a621f5f147e5866b6af9cdd205b9c
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Wed Feb 16 11:05:38 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Thu Feb 17 01:13:52 2022 +0100

    remove MAXCOL/MAXROW from ScExternalRefCache
    
    The range is used just for filtering out, and since this is about
    references to other documents, I wasn't sure which document to use
    as the limits, so I did a copy that of the functions that returns
    all.
    
    Change-Id: I9711534004796496558848adef03d38ddb115441
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129988
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/inc/externalrefmgr.hxx b/sc/inc/externalrefmgr.hxx
index 1064910ad975..20931043bfd1 100644
--- a/sc/inc/externalrefmgr.hxx
+++ b/sc/inc/externalrefmgr.hxx
@@ -144,11 +144,13 @@ public:
         void setReferenced( bool bReferenced );
         bool isReferenced() const;
         /// Obtain a sorted vector of rows.
-        void getAllRows(::std::vector<SCROW>& rRows, SCROW nLow = 0, SCROW 
nHigh = MAXROW) const;
+        void getAllRows(::std::vector<SCROW>& rRows, SCROW nLow, SCROW nHigh) 
const;
+        void getAllRows(::std::vector<SCROW>& rRows) const;
         /// Returns the half-open range of used rows in this table. Returns 
[0,0) if table is empty.
         SC_DLLPUBLIC ::std::pair< SCROW, SCROW > getRowRange() const;
         /// Obtain a sorted vector of columns.
-        void getAllCols(SCROW nRow, ::std::vector<SCCOL>& rCols, SCCOL nLow = 
0, SCCOL nHigh = MAXCOL) const;
+        void getAllCols(SCROW nRow, ::std::vector<SCCOL>& rCols, SCCOL nLow, 
SCCOL nHigh) const;
+        void getAllCols(SCROW nRow, ::std::vector<SCCOL>& rCols) const;
         /// Returns the half-open range of used columns in the specified row. 
Returns [0,0) if row is empty.
         SC_DLLPUBLIC ::std::pair< SCCOL, SCCOL > getColRange( SCROW nRow ) 
const;
         void getAllNumberFormats(::std::vector<sal_uInt32>& rNumFmts) const;
@@ -168,6 +170,10 @@ public:
     private:
         bool isInCachedRanges(SCCOL nCol, SCROW nRow) const;
         TokenRef getEmptyOrNullToken(SCCOL nCol, SCROW nRow) const;
+        template< typename P >
+        void getAllRows(::std::vector<SCROW>& rRows, P predicate) const;
+        template< typename P >
+        void getAllCols(SCROW nRow, ::std::vector<SCCOL>& rCols, P predicate) 
const;
 
     private:
         /** Data cache */
diff --git a/sc/source/ui/docshell/externalrefmgr.cxx 
b/sc/source/ui/docshell/externalrefmgr.cxx
index af4dc4b7d27b..2f2bf13bd2fc 100644
--- a/sc/source/ui/docshell/externalrefmgr.cxx
+++ b/sc/source/ui/docshell/externalrefmgr.cxx
@@ -330,12 +330,13 @@ bool ScExternalRefCache::Table::hasRow( SCROW nRow ) const
     return itrRow != maRows.end();
 }
 
-void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows, SCROW nLow, 
SCROW nHigh) const
+template< typename P >
+void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows, P predicate) 
const
 {
     vector<SCROW> aRows;
     aRows.reserve(maRows.size());
     for (const auto& rEntry : maRows)
-        if (nLow <= rEntry.first && rEntry.first <= nHigh)
+        if (predicate(rEntry))
             aRows.push_back(rEntry.first);
 
     // hash map is not ordered, so we need to explicitly sort it.
@@ -343,6 +344,17 @@ void ScExternalRefCache::Table::getAllRows(vector<SCROW>& 
rRows, SCROW nLow, SCR
     rRows.swap(aRows);
 }
 
+void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows, SCROW nLow, 
SCROW nHigh) const
+{
+    getAllRows(rRows,
+        [nLow, nHigh](std::pair<SCROW, RowDataType> rEntry) { return (nLow <= 
rEntry.first && rEntry.first <= nHigh); });
+}
+
+void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows) const
+{
+    getAllRows(rRows, [](std::pair<SCROW, RowDataType>) { return true; } );
+}
+
 ::std::pair< SCROW, SCROW > ScExternalRefCache::Table::getRowRange() const
 {
     ::std::pair< SCROW, SCROW > aRange( 0, 0 );
@@ -357,7 +369,8 @@ void ScExternalRefCache::Table::getAllRows(vector<SCROW>& 
rRows, SCROW nLow, SCR
     return aRange;
 }
 
-void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols, 
SCCOL nLow, SCCOL nHigh) const
+template< typename P >
+void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols, P 
predicate) const
 {
     RowsDataType::const_iterator itrRow = maRows.find(nRow);
     if (itrRow == maRows.end())
@@ -368,7 +381,7 @@ void ScExternalRefCache::Table::getAllCols(SCROW nRow, 
vector<SCCOL>& rCols, SCC
     vector<SCCOL> aCols;
     aCols.reserve(rRowData.size());
     for (const auto& rCol : rRowData)
-        if (nLow <= rCol.first && rCol.first <= nHigh)
+        if (predicate(rCol))
             aCols.push_back(rCol.first);
 
     // hash map is not ordered, so we need to explicitly sort it.
@@ -376,6 +389,17 @@ void ScExternalRefCache::Table::getAllCols(SCROW nRow, 
vector<SCCOL>& rCols, SCC
     rCols.swap(aCols);
 }
 
+void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols, 
SCCOL nLow, SCCOL nHigh) const
+{
+    getAllCols(nRow, rCols,
+        [nLow, nHigh](std::pair<SCCOL, Cell> rCol) { return nLow <= rCol.first 
&& rCol.first <= nHigh; } );
+}
+
+void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols) 
const
+{
+    getAllCols(nRow, rCols, [](std::pair<SCCOL, Cell>) { return true; } );
+}
+
 ::std::pair< SCCOL, SCCOL > ScExternalRefCache::Table::getColRange( SCROW nRow 
) const
 {
     ::std::pair< SCCOL, SCCOL > aRange( 0, 0 );

Reply via email to