14#define ROW_VECTOR_OVERSIZE 10
15#define COLUMN_VECTOR_OVERSIZE 1
28template <
typename HELD_DATA>
32 unsigned int _cols_num = 0;
33 unsigned int _rows_num = 0;
34 vector<vector<HELD_DATA>> _table;
46 void insertData(HELD_DATA d,
unsigned int row ,
unsigned int col){
57 _table.at(col).at(row) = d;
64 HELD_DATA
getData(
int row ,
int col)
const {
65 return _table.at(col).at(row);
74 void eraseRow(
int start_row,
int rows_num = 1){
75 for(
int i = 0; i < _table.size(); i++){
76 _table.at(i).erase(_table.at(i).begin() + start_row , _table.at(i).begin() + start_row + rows_num);
87 _table.erase(_table.begin() + start_col, _table.begin() + start_col + cols_num);
96 for(
unsigned int i = 0; i < _cols_num; i++){
97 if(_table.at(i).size() <= _rows_num){
98 _table.at(i).resize(_rows_num);
102 _table.shrink_to_fit();
103 for(
unsigned int i = 0; i < _table.size(); i++){
104 _table.at(i).shrink_to_fit();
114 bool extractRow(
unsigned int rowNumber, std::vector<HELD_DATA> &returnArray){
115 if(rowNumber > this->_rows_num){
118 for(
unsigned int idx = 0; idx < _cols_num; idx++){
119 returnArray.push_back(
getData(rowNumber, idx));
129 bool extractColumn(
unsigned int columnNumber, std::vector<HELD_DATA> &returnArray){
130 if(columnNumber > this->_cols_num){
133 returnArray = _table.at(columnNumber);
142 bool insertRow(
unsigned int rowNumber,
const std::vector<HELD_DATA> &putArray){
143 for(
unsigned int idx = 0; idx < putArray->size(); idx++){
144 this->
insertData(putArray->at(idx), rowNumber , idx);
153 bool insertColumn(
unsigned int columnNumber,
const std::vector<HELD_DATA> &putArray){
154 if(columnNumber >= this->_table.size()){
155 this->_table.resize(columnNumber + 1);
156 _cols_num = columnNumber + 1;
158 if(putArray.size() >= this->_rows_num){
159 _rows_num = putArray.size();
161 _table.at(columnNumber) = putArray;
173 if((rowStart >= this->_rows_num) || (rowEnd >= this->_rows_num) || (columnStart >= this->_cols_num) || (columnEnd >= this->_cols_num)){
176 for(
int i = columnStart; i <= columnEnd; i++){
177 if(i < subTable._table.size()){
178 subTable._table.at(i) = ( std::vector<HELD_DATA>(this->_table.at(i).begin() + rowStart ,this->_table.at(i).begin() + rowEnd + 1));
180 subTable._table.push_back( std::vector<HELD_DATA>(this->_table.at(i).begin() + rowStart ,this->_table.at(i).begin() + rowEnd + 1));
184 subTable._rows_num = abs(rowEnd - rowStart + 1);
185 subTable._cols_num = columnEnd - columnStart + 1;
bool insertColumn(unsigned int columnNumber, const std::vector< HELD_DATA > &putArray)
inserts a column in the table replacing existing if they exist or adds them
bool sub_table(dataTable &subTable, int rowStart, int rowEnd, int columnStart, int columnEnd)
EXTRACT A SUBSET OF THE BIGGER TABLE.
bool insertRow(unsigned int rowNumber, const std::vector< HELD_DATA > &putArray)
inserts a row in the table replacing existing if they exist or adds them
HELD_DATA getData(int row, int col) const
return the data at some address
bool extractRow(unsigned int rowNumber, std::vector< HELD_DATA > &returnArray)
Extracts a row from the dataTable in a vector.
void insertData(HELD_DATA d, unsigned int row, unsigned int col)
inserts a value to a cell of dataTable instance with that address
void eraseColumn(int start_col, int cols_num=1)
entirely deletes colunms and frees thier memory while keeping order
void eraseRow(int start_row, int rows_num=1)
entirely deletes the rows and frees their memory
unsigned int get_col_num()
unsigned int get_row_num()
bool extractColumn(unsigned int columnNumber, std::vector< HELD_DATA > &returnArray)
Extracts a row from the dataTable in a vector.
void refresh()
refreshes the data Table for any mistake probability or bad handling
#define COLUMN_VECTOR_OVERSIZE
#define ROW_VECTOR_OVERSIZE