10 #ifndef INCLUDED_SC_INC_COLUMNSPANSET_HXX
11 #define INCLUDED_SC_INC_COLUMNSPANSET_HXX
16 #include <mdds/flat_segment_tree.hpp>
26 struct ColumnBlockConstPosition;
27 class SingleColumnSpanSet;
58 ColumnSpansType::const_iterator
miPos;
63 typedef std::vector<std::unique_ptr<ColumnType>>
TableType;
65 std::vector<std::unique_ptr<TableType>>
maTables;
143 void getRows(std::vector<SCROW> &rRows)
const;
145 void getSpans(SpansType& rSpans)
const;
164 :
range( spanRange ) {}
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
ColumnType & getColumn(const ScDocument &rDoc, SCTAB nTab, SCCOL nCol)
virtual void execute(const ScAddress &rPos, SCROW nLength, bool bVal)=0
virtual void startColumn(SCTAB nTab, SCCOL nCol)
void scan(const ScDocument &rDoc, SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, bool bVal)
Scan specified range in a specified sheet and mark all non-empty cells with specified boolean value...
mdds::flat_segment_tree< SCROW, bool > ColumnSpansType
mdds::flat_segment_tree< SCROW, bool > ColumnSpansType
bool empty() const
Whether there isn't any row tagged.
ScSheetLimits const & mrSheetLimits
Keep track of spans in a single column only.
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
void set(const ScDocument &rDoc, SCTAB nTab, SCCOL nCol, SCROW nRow, bool bVal)
Optimized ColumnSpanSet version that operates on a single ScRange.
void executeColumnAction(ScDocument &rDoc, ColumnAction &ac) const
void getSpans(SpansType &rSpans) const
void getRows(std::vector< SCROW > &rRows) const
void set(SCROW nRow1, SCROW nRow2, bool bVal)
Structure that stores segments of boolean flags per column, and perform custom action on those segmen...
const ColumnSpanSet & operator=(const ColumnSpanSet &)=delete
RangeColumnSpanSet(const ScRange &spanRange)
ColumnSpansType::const_iterator miPos
RowSpan(SCROW nRow1, SCROW nRow2)
virtual void executeSum(SCROW, SCROW, bool, double &)
virtual ~ColumnAction()=0
std::vector< RowSpan > SpansType
ColumnType(SCROW nStart, SCROW nEnd, bool bInit)
void scan(const ScColumn &rColumn)
Scan an entire column and tag all non-empty cell positions.
void executeColumnAction(ScDocument &rDoc, sc::ColumnSpanSet::ColumnAction &ac) const
SingleColumnSpanSet(ScSheetLimits const &)
void swap(SingleColumnSpanSet &r)
virtual void execute(SCROW nRow1, SCROW nRow2, bool bVal)=0
std::vector< std::unique_ptr< TableType > > maTables
std::vector< std::unique_ptr< ColumnType > > TableType
virtual void startColumn(ScColumn *pCol)=0
void executeAction(Action &ac) const