Warning, /office/calligra/sheets/doc/NOTES.limits is written in an unsupported language. File is not indexed.
0001 Calligra Sheets column/row limits 0002 ================================= 0003 0004 Restrictions by sizeof(int); i <= 2^31-1: 0005 ----------------------------------------- 0006 - PointStorage.h: 0007 QVector<T>'s index is an int; Provides access to all cells. 0008 Therefore, sizeof(col)*sizeof(row) <= sizeof(int); sizeof(col/row) = 2^16; 0009 As QVector and QRect depend on (signed) int: max(col/row) = 2^15-1 0010 -> Global.h: KS_colMax = 2^15-1, KS_rowMax = 2^15-1 0011 -> Cell::Private: restriction by bit fields; 16 bits per column/row 0012 -> Region.h: 0013 uint qHash(QPoint); column coded in first 16 bits, row in the last 0014 Can be extended by just considering the last 16 bits of the col/row, 0015 even if bigger than 16 bits. Leads to hash collisions, but works. 0016 -> Cell.h: 0017 uint qHash(Cell); column coded in first 16 bits, row in the last 0018 Can be extended by just considering the last 16 bits of the col/row, 0019 even if bigger than 16 bits. Leads to hash collisions, but works. 0020 -> Column-/RowCluster: restricted to 2^15 0021 Can be extended easily by increasing one of the cluster levels, 0022 preferably the first. 0023 The limitation could be lifted, if a clustered array is used in PointStorage 0024 and PointStorage::data(int), ::col(int), ::row(int) get ported to qint64. 0025 - QRect: based on int 0026 0027 Minor issues, that would need adjustment: 0028 ----------------------------------------- 0029 - Headers.h: The RowHeader's width should display all row numbers correctly. 0030 - Sheet: QHash<QString, QRegion> *StyleRegion; QRegion is restricted (on Windows 95/98/ME) 0031 0032 Other restrictions: 0033 ------------------- 0034 - Rect-/StyleStorage.h: 0035 Based on QRectF, which is based on qreal (double or float). Numbers range 0036 from 0..2^52 or 0..2^23, resp., with an exponent of 0, i.e. mantissa * 2^0. 0037 Other exponents lead to "integer gaps"; step size != 1 (Actually, if a 0038 number could be expressed with an other exponent without inaccurrancy, this 0039 will be done, but that does not matter here. It's possible to encode it with 0040 e=0.) 0041 0042 Performance: 0043 ------------ 0044 - Copying cell contents is done cell-by-cell. PointStorage is arranged in rows, 0045 i.e. copying of rows could be optimized, but for columns a traversal of all 0046 occupied columns is necessary. 0047 Go the same way as in Cluster and follow a two-levelled approach? Could be an 0048 option for further optimizations for copying areas, but would give headaches 0049 at the cluster boundaries.