6#include "da_algorithm.hpp"
34 typedef std::shared_ptr< SeriesType > SeriesPtr;
37 typedef std::shared_ptr< TableType > TablePtr;
39 static SeriesPtr makeSeries();
40 static SeriesPtr makeSeries(
const QString& n);
41 static SeriesPtr makeSeries(std::initializer_list< T > args);
42 static TablePtr makeTable();
47 void reserve(
int size);
49 bool haveFieldid(
const QString& field)
const;
65 void fill(
const T& v);
66 const T& at(
int r,
int c)
const;
68 T
cell(
int r,
int c)
const;
69 int nameToIndex(
const QString& n)
const;
71 const SeriesPtr&
column(
int r)
const;
72 SeriesPtr&
column(
const QString& n);
73 const SeriesPtr&
column(
const QString& n)
const;
75 SeriesPtr appendColumn(
const QString& name);
76 SeriesPtr appendColumn(
const QString& name,
int size);
77 void appendColumn(SeriesPtr col);
78 void appendColumn(std::initializer_list< T > datas,
const QString& colName);
79 template<
typename Ite1,
typename Ite2 >
80 void appendRow(Ite1 b, Ite2 e);
81 void appendRow(std::initializer_list< T > rowDatas);
83 SeriesPtr row(
int c)
const;
85 SeriesType& operator[](
int c);
86 const SeriesType& operator[](
int c)
const;
87 SeriesType& operator[](
const QString& colname);
88 const SeriesType& operator[](
const QString& colname)
const;
106 void setName(
const QString& n);
107 QString getName()
const;
131 void remove(
const QString& name);
132 void remove(
int colIndex);
138 SeriesPtr m_nullseries;
146template<
typename T >
147typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::makeSeries()
149 return (std::make_shared< SeriesType >());
152template<
typename T >
153typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::makeSeries(
const QString& n)
155 return (std::make_shared< SeriesType >(n));
158template<
typename T >
159typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::makeSeries(std::initializer_list< T > args)
161 return (std::make_shared< SeriesType >(args));
164template<
typename T >
165typename DAColumnTable< T >::TablePtr DAColumnTable< T >::makeTable()
167 return (std::make_shared<
typename DAColumnTable< T >::TableType >());
170template<
typename T >
171DAColumnTable< T >::DAColumnTable() : m_rows(0), m_mode(FixedMode), m_caseSensitivity(CaseInsensitive)
175template<
typename T >
176DAColumnTable< T >::DAColumnTable(
int rows,
int columns) : m_mode(FixedMode), m_caseSensitivity(CaseInsensitive)
179 m_d.reserve(columns);
180 for (
int i = 0; i < columns; ++i) {
181 m_d.push_back(SeriesType(rows));
191template<
typename T >
195 for (SeriesPtr& col : m_d) {
196 if (col ==
nullptr) {
204template<
typename T >
207 for (SeriesPtr p : m_d) {
212template<
typename T >
213bool DAColumnTable< T >::haveFieldid(
const QString& field)
const
215 Qt::CaseSensitivity cs = isCaseSensitivity() ? Qt::CaseSensitive : Qt::CaseInsensitive;
216 for (
const SeriesPtr& col : qAsConst(m_d)) {
217 if (col ==
nullptr) {
220 if (col->name().compare(field, cs) == 0) {
227template<
typename T >
233template<
typename T >
239template<
typename T >
242 for (SeriesPtr c : m_d) {
247template<
typename T >
250 return (m_d.at(c)->at(r));
253template<
typename T >
254T& DAColumnTable< T >::at(
int r,
int c)
256 return (m_d[ c ]->
operator[](r));
265template<
typename T >
268 if (c < m_d.size()) {
269 const SeriesPtr& cc = column(c);
270 if (r < cc->size()) {
277template<
typename T >
280 int c = columnCount();
281 Qt::CaseSensitivity cs = isCaseSensitivity() ? Qt::CaseSensitive : Qt::CaseInsensitive;
283 for (
int i = 0; i < c; ++i) {
284 if (column(i)->name().compare(n, cs) == 0) {
295template<
typename T >
305template<
typename T >
311template<
typename T >
314 int c = nameToIndex(n);
316 if ((c < 0) || (c >= columnCount())) {
317 return (m_nullseries);
322template<
typename T >
325 int c = nameToIndex(n);
327 if ((c < 0) || (c >= columnCount())) {
328 return (m_nullseries);
333template<
typename T >
334typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::appendColumn(
const QString& name)
336 return appendColumn(name, m_rows);
339template<
typename T >
340typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::appendColumn(
const QString& name,
int size)
342 SeriesPtr s = makeSeries(name);
348template<
typename T >
349void DAColumnTable< T >::appendColumn(DAColumnTable< T >::SeriesPtr col)
351 size_t s = col->size();
353 if ((s == m_rows) || (0 == m_rows)) {
356 }
else if (s < m_rows) {
360 if (getMode() == ExpandMode) {
371template<
typename T >
372void DAColumnTable< T >::appendColumn(std::initializer_list< T > datas,
const QString& colName)
374 SeriesPtr c = makeSeries(datas);
380template<
typename T >
381template<
typename Ite1,
typename Ite2 >
382void DAColumnTable< T >::appendRow(Ite1 b, Ite2 e)
384 const int cc = columnCount();
387 for (
int i = 0; i < cc; ++i) {
390 column(i)->push_back(*it);
392 column(i)->push_back(T());
398template<
typename T >
399void DAColumnTable< T >::appendRow(std::initializer_list< T > rowDatas)
401 const int cc = columnCount();
403 for (
int i = 0; i < cc; ++i) {
404 if (i < rowDatas.size()) {
405 column(i)->push_back(rowDatas[ i ]);
407 column(i)->push_back(T());
413template<
typename T >
414typename DAColumnTable< T >::SeriesPtr DAColumnTable< T >::row(
int r)
const
416 int csize = columnCount();
417 SeriesPtr rs = std::make_shared< SeriesType >(csize);
419 for (
int c = 0; c < csize; ++c) {
420 rs->operator[](c) = cell(r, c);
425template<
typename T >
426typename DAColumnTable< T >::SeriesType& DAColumnTable< T >::operator[](
int c)
428 return (*(column(c)));
431template<
typename T >
432const typename DAColumnTable< T >::SeriesType& DAColumnTable< T >::operator[](
int c)
const
434 return (*(column(c)));
436template<
typename T >
437typename DAColumnTable< T >::SeriesType& DAColumnTable< T >::operator[](
const QString& colname)
439 return (*(column(colname)));
442template<
typename T >
443const typename DAColumnTable< T >::SeriesType& DAColumnTable< T >::operator[](
const QString& colname)
const
445 return (*(column(colname)));
448template<
typename T >
451 std::vector< int > ss;
452 ss.reserve(m_d.size());
454 for (
const SeriesPtr& c : qAsConst(m_d)) {
455 ss.push_back(c->size());
457 int maxsize = *(std::max_element(ss.begin(), ss.end()));
459 for (SeriesPtr& c : m_d) {
460 if (c->size() < maxsize) {
467template<
typename T >
473template<
typename T >
479template<
typename T >
486template<
typename T >
492template<
typename T >
493QString DAColumnTable< T >::getName()
const
495 return (m_d.getName());
498template<
typename T >
503 for (
const SeriesPtr& p : qAsConst(m_d)) {
504 r.append(p->getName());
509template<
typename T >
512 auto cc = std::min(ns.size(), columnCount());
513 for (
int i = 0; i < cc; ++i) {
514 column(i)->setName(ns[ i ]);
518template<
typename T >
521 m_caseSensitivity = cs;
524template<
typename T >
527 return (m_caseSensitivity == CaseSensitive);
530template<
typename T >
533 int r = nameToIndex(name);
540template<
typename T >
541void DAColumnTable< T >::remove(
int colIndex)
543 m_d.remove(colIndex);
544 if (0 == m_d.size()) {
列族表
Definition DAColumnTable.hpp:19
bool isCaseSensitivity() const
判断是否大小写敏感
Definition DAColumnTable.hpp:525
void resize(int r, int c)
改变table 的大小
Definition DAColumnTable.hpp:192
int rowCount() const
表的行数
Definition DAColumnTable.hpp:228
Mode
Definition DAColumnTable.hpp:22
@ FixedMode
固定模式,表的列不会随着行的变化而变化(默认)
Definition DAColumnTable.hpp:23
@ ExpandMode
扩展模式,表的列是浮动的,如果插入一行比原来要宽,会自动扩充表的列数
Definition DAColumnTable.hpp:24
T cell(int r, int c) const
获取单元格
Definition DAColumnTable.hpp:266
void clear()
清空
Definition DAColumnTable.hpp:480
SeriesPtr & column(int r)
获取列引用
Definition DAColumnTable.hpp:296
void setColumnNames(const QStringList &ns)
设置行名,如果是个空的表会生成一个默认行
Definition DAColumnTable.hpp:510
int columnCount() const
表的列数
Definition DAColumnTable.hpp:234
QStringList columnNames() const
colNames
Definition DAColumnTable.hpp:499
CaseSensitivity
Definition DAColumnTable.hpp:27
@ CaseSensitive
大小写敏感
Definition DAColumnTable.hpp:29
@ CaseInsensitive
大小写不敏感
Definition DAColumnTable.hpp:28
void setCaseSensitivity(CaseSensitivity cs)
设置名字查询时是否对大小写敏感
Definition DAColumnTable.hpp:519
void fixSize()
以最大列数进行列数修正,保证所有行同列
Definition DAColumnTable.hpp:449
void fill(const T &v)
填充元素
Definition DAColumnTable.hpp:240
void setMode(Mode m)
设置表格的模式
Definition DAColumnTable.hpp:468
系列数据,系列允许设置名字
Definition da_data_table.hpp:19
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44