LibreOffice Module sc (master)  1
cellvalues.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef INCLUDED_SC_INC_CELLVALUES_HXX
11 #define INCLUDED_SC_INC_CELLVALUES_HXX
12 
13 #include "address.hxx"
14 #include <memory>
15 #include <vector>
16 
17 class ScColumn;
18 class ScFormulaCell;
19 
20 namespace svl
21 {
22 class SharedString;
23 }
24 
25 namespace sc
26 {
27 struct CellValuesImpl;
28 
30 {
33 
34  CellValueSpan(SCROW nRow1, SCROW nRow2);
35 };
36 
42 {
43  std::unique_ptr<CellValuesImpl> mpImpl;
44 
45  CellValues(const CellValues&) = delete;
46  CellValues& operator=(const CellValues&) = delete;
47 
48 public:
49  CellValues();
50  ~CellValues();
51 
60  void transferFrom(ScColumn& rCol, SCROW nRow, size_t nLen);
61 
62  void copyTo(ScColumn& rCol, SCROW nRow) const;
63  void swapNonEmpty(ScColumn& rCol);
64 
65  void assign(const std::vector<double>& rVals);
66  void assign(const std::vector<ScFormulaCell*>& rVals);
67 
68  size_t size() const;
69 
70  void reset(size_t nSize);
71  void setValue(size_t nRow, double fVal);
72  void setValue(size_t nRow, const svl::SharedString& rStr);
73 
74  void swap(CellValues& r);
75 
76  std::vector<CellValueSpan> getNonEmptySpans() const;
77 
78 private:
79  void copyCellsTo(ScColumn& rCol, SCROW nRow) const;
80  void copyCellTextAttrsTo(ScColumn& rCol, SCROW nRow) const;
81 };
82 
87 {
88  struct Impl;
89 
90  std::unique_ptr<Impl> mpImpl;
91 
92  TableValues(const TableValues&) = delete;
93  TableValues& operator=(const TableValues&) = delete;
94 
95 public:
96  TableValues();
97  TableValues(const ScRange& rRange);
98  ~TableValues();
99 
100  const ScRange& getRange() const;
101 
105  void swap(SCTAB nTab, SCCOL nCol, CellValues& rColValue);
106 
110  void swapNonEmpty(SCTAB nTab, SCCOL nCol, ScColumn& rCol);
111 
112  std::vector<CellValueSpan> getNonEmptySpans(SCTAB nTab, SCCOL nCol) const;
113 
114  void swap(TableValues& rOther);
115 };
116 }
117 
118 #endif
119 
120 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void reset(size_t nSize)
Definition: cellvalues.cxx:127
void swap(SCTAB nTab, SCCOL nCol, CellValues &rColValue)
Swap the entire column.
Definition: cellvalues.cxx:322
TableValues & operator=(const TableValues &)=delete
Think of this as a mini-ScColumn like storage that only stores cell values in a column.
Definition: cellvalues.hxx:41
CellValueSpan(SCROW nRow1, SCROW nRow2)
Definition: cellvalues.cxx:29
Stores cell values for multiple tables.
Definition: cellvalues.hxx:86
void transferFrom(ScColumn &rCol, SCROW nRow, size_t nLen)
Transfer values from specified column.
Definition: cellvalues.cxx:52
void copyCellTextAttrsTo(ScColumn &rCol, SCROW nRow) const
Definition: cellvalues.cxx:236
void swapNonEmpty(ScColumn &rCol)
Definition: cellvalues.cxx:67
void setValue(size_t nRow, double fVal)
Definition: cellvalues.cxx:138
void assign(const std::vector< double > &rVals)
Definition: cellvalues.cxx:91
void copyCellsTo(ScColumn &rCol, SCROW nRow) const
Definition: cellvalues.cxx:171
sal_Int16 SCCOL
Definition: types.hxx:22
size_t size() const
Definition: cellvalues.cxx:121
std::vector< CellValueSpan > getNonEmptySpans() const
Definition: cellvalues.cxx:155
const ScRange & getRange() const
Definition: cellvalues.cxx:317
std::unique_ptr< Impl > mpImpl
Definition: cellvalues.hxx:88
std::unique_ptr< CellValuesImpl > mpImpl
Definition: cellvalues.hxx:43
std::vector< CellValueSpan > getNonEmptySpans(SCTAB nTab, SCCOL nCol) const
Definition: cellvalues.cxx:340
void copyTo(ScColumn &rCol, SCROW nRow) const
Definition: cellvalues.cxx:61
sal_Int32 SCROW
Definition: types.hxx:18
CellValues & operator=(const CellValues &)=delete
void swap(CellValues &r)
Definition: cellvalues.cxx:150
These need to be in global namespace just like their respective types are.
sal_Int16 SCTAB
Definition: types.hxx:23
void swapNonEmpty(SCTAB nTab, SCCOL nCol, ScColumn &rCol)
Swap non-empty blocks with the column storage.
Definition: cellvalues.cxx:331