ISTable Class Reference

Public class that respresents a two-dimensional table of strings. More...

#include <ISTable.h>

List of all members.

Public Types

enum  eTableDiff {
  eNONE = 0, eCASE_SENSE, eMORE_COLS, eLESS_COLS,
  eCOL_NAMES, eMORE_ROWS, eLESS_ROWS, eCELLS,
  eMISSING, eEXTRA
}
typedef ITTable::eOrientation eOrientation
typedef ITTable::eSearchType eSearchType
typedef ITTable::eSearchDir eSearchDir

Public Member Functions

 ISTable (const StringCompare::eCompareType colCaseSense=StringCompare::eCASE_SENSITIVE)
 ISTable (eOrientation orient, const StringCompare::eCompareType colCaseSense=StringCompare::eCASE_SENSITIVE)
 ISTable (const string &name, const StringCompare::eCompareType colCaseSense=StringCompare::eCASE_SENSITIVE)
 ISTable (const string &name, eOrientation orient, const StringCompare::eCompareType colCaseSense=StringCompare::eCASE_SENSITIVE)
 ISTable (const ISTable &inTable)
 ~ISTable ()
ISTableoperator= (const ISTable &inTable)
eTableDiff operator== (ISTable &inTable)
const string & GetName () const
void SetName (const string &name)
unsigned int GetNumColumns () const
const vector< string > & GetColumnNames () const
bool IsColumnPresent (const string &colName)
void AddColumn (const string &colName, const vector< string > &col=vector< string >(0))
void InsertColumn (const string &colName, const string &afColName, const vector< string > &col=vector< string >(0))
void FillColumn (const string &colName, const vector< string > &col)
void GetColumn (vector< string > &col, const string &colName)
void GetColumn (vector< string > &col, const string &colName, const unsigned int fromRowIndex, unsigned int toRowIndex)
void GetColumn (vector< string > &col, const string &colName, const vector< unsigned int > &rowIndex)
void RenameColumn (const string &oldColName, const string &newColName)
void ClearColumn (const string &colName)
void DeleteColumn (const string &colName)
unsigned int GetNumRows () const
unsigned int AddRow (const vector< string > &row=vector< string >(0))
unsigned int InsertRow (const unsigned int atRowIndex, const vector< string > &row=vector< string >(0))
void FillRow (const unsigned int rowIndex, const vector< string > &row)
void GetRow (vector< string > &row, const unsigned int rowIndex, const string &fromColName=String::Empty, const string &toColName=String::Empty)
const vector< string > & GetRow (const unsigned int rowIndex)
void ClearRow (const unsigned int rowIndex)
void DeleteRow (const unsigned int rowIndex)
void DeleteRows (const vector< unsigned int > &rows)
unsigned int GetLastRowIndex ()
void UpdateCell (const unsigned int rowIndex, const string &colName, const string &value)
const string & operator() (const unsigned int rowIndex, const string &colName) const
void SetFlags (const string &colName, const unsigned char flags)
unsigned char GetDataType (const string &colName)
unsigned int FindFirst (const vector< string > &targets, const vector< string > &colNames, const string &indexName=String::Empty)
void Search (vector< unsigned int > &res, const string &target, const string &colName, const unsigned int fromRowIndex=0, const eSearchDir searchDir=eFORWARD, const eSearchType searchType=eEQUAL)
void Search (vector< unsigned int > &res, const vector< string > &targets, const vector< string > &colNames, const unsigned int fromRowIndex=0, const eSearchDir searchDir=eFORWARD, const eSearchType searchType=eEQUAL, const string &indexName=String::Empty)
void FindDuplicateRows (vector< pair< unsigned int, unsigned int > > &duplRows, const vector< string > &colNames, const bool keepDuplRows, const eSearchDir searchDir=eFORWARD)
StringCompare::eCompareType GetColCaseSense () const
void SetModified (const bool modified)
bool GetModified ()
void SetSerializer (Serializer *ser)
int WriteObject (Serializer *ser, int &size)
int GetObject (UInt32 index, Serializer *ser)
void Read (unsigned int indexInFile)
int Write ()
bool PrintDiff (ISTable &inTable)
bool IndexExists (const string &indexName)
void CreateIndex (const string &indexName, const vector< string > &colNames, const unsigned int unique=0)
void UpdateIndex (const string &indexName, const unsigned int rowIndex)
void RebuildIndex (const string &indexName)
void RebuildIndices ()
void DeleteIndex (const string &indexName)
unsigned int GetNumIndices ()
void CreateKey (const vector< string > &colNames)
void DeleteKey ()
void GetColumnsIndices (vector< unsigned int > &colIndices, const vector< string > &colNames)
void GetColumn (vector< string > &col, const string &colName, const string &indexName)

Static Public Member Functions

static ISTableMerge (ISTable &firstTable, ISTable &secondTable, unsigned int typeOfMerge=0)
static void SetUnion (const vector< unsigned int > &a, const vector< unsigned int > &b, vector< unsigned int > &ret)
static void SetIntersect (const vector< unsigned int > &a, const vector< unsigned int > &b, vector< unsigned int > &ret)

Static Public Attributes

static const eOrientation eCOLUMN_WISE = ITTable::eCOLUMN_WISE
static const eOrientation eROW_WISE = ITTable::eROW_WISE
static const eSearchType eEQUAL = ITTable::eEQUAL
static const eSearchType eLESS_THAN = ITTable::eLESS_THAN
static const eSearchType eLESS_THAN_OR_EQUAL = ITTable::eLESS_THAN_OR_EQUAL
static const eSearchType eGREATER_THAN = ITTable::eGREATER_THAN
static const eSearchType eGREATER_THAN_OR_EQUAL = ITTable::eGREATER_THAN_OR_EQUAL
static const eSearchDir eFORWARD = ITTable::eFORWARD
static const eSearchDir eBACKWARD = ITTable::eBACKWARD
static const unsigned char DT_STRING_VAL = 1
static const unsigned char DT_INTEGER_VAL = 2
static const unsigned char CASE_SENSE = 0x00
static const unsigned char CASE_INSENSE = 0x01
static const unsigned char W_SPACE_SENSE = 0x00
static const unsigned char W_SPACE_INSENSE = 0x02
static const unsigned char DT_STRING = DT_STRING_VAL << 4
static const unsigned char DT_INTEGER = DT_INTEGER_VAL << 4

Private Member Functions

void InsertColumn (const string &colName, const unsigned int atColIndex, const vector< string > &col=vector< string >(0))
void CreateColumn (const string &colName, const unsigned int atColIndex, const vector< string > &col=vector< string >(0))
int UpdateCell (const string &cell, const unsigned int colIndex, const unsigned int rowIndex)
const string & operator() (const unsigned int rowIndex, const unsigned int colIndex) const
int SetFlags (const unsigned char newOpts, const unsigned int colIndex)
void FindDuplicateRows (const vector< unsigned int > &colIndices, vector< pair< unsigned int, unsigned int > > &duplRows, const unsigned int keep, const eSearchDir searchDir=eFORWARD)
void VerifyColumnsIndices (const vector< unsigned int > &colIndices)
bool AreListsOfColumnsValid (const vector< unsigned int > &colIndices)
void CreateIndex (const string &indexName, const vector< unsigned int > &colIndices, const unsigned int unique=0)
void CreateKey (const vector< unsigned int > &colIndices)
unsigned int FindFirst (const vector< string > &targets, const vector< unsigned int > &colIndices, const string &indexName=String::Empty)
void Search (vector< unsigned int > &res, const vector< string > &targets, const vector< unsigned int > &colIndices, const unsigned int fromRowIndex=0, const eSearchDir searchDir=eFORWARD, const eSearchType searchType=eEQUAL, const string &indexName=String::Empty)
void Init ()
void Clear ()
StringCompare::eCompareType GetCompareType (const vector< unsigned int > &colIndices)
string CellValue (const unsigned int colIndex, const unsigned int rowIndex)
string ConvertString (const string &value, const unsigned int colIndex)
string MultiStringsValue (const vector< string > &values, const vector< unsigned int > &colIndices)
string SubRowValue (const vector< unsigned int > &colIndices, const unsigned int rowIndex)
string AggregateRow (const vector< unsigned int > &colIndices, const unsigned int rowIndex)
void AppendToAndDelimit (string &to, const string &appending)
void ValidateOptions (unsigned int colIndex)
string CreateInternalIndexName (const unsigned int indexIndex)
void UpdateIndex (const unsigned int indexIndex, const unsigned int rowIndex)
void RebuildIndex (const unsigned int indexIndex)
void ClearIndex (const unsigned int indexIndex)
void DeleteIndex (const unsigned int indexIndex)
int FindIndex (const string &indexName)
int FindIndex (const vector< unsigned int > &colIndices)
void UpdateIndices (const unsigned int rowIndex)
void ClearIndices ()
bool IsColumnInIndex (const unsigned int indexIndex, const unsigned int colIndex)
int FindKeyIndex ()
void UpdateColListOnColInsert (const unsigned int colIndex)
void UpdateColListOnColDelete (const unsigned int colIndex)
void UpdateColListOnCellUpdate (const unsigned int rowIndex, const unsigned int colIndex)
unsigned int FindFirst (const vector< string > &targets, const vector< unsigned int > &colIndices, const unsigned int indexIndex)
int WriteObjectV9 (Serializer *, int &size)
int GetObjectV9 (UInt32 index, Serializer *)
int GetObjectV8 (UInt32 index, Serializer *)
int GetObjectV7 (UInt32 index, Serializer *)
int GetObjectV6 (UInt32 index, Serializer *)
int GetObjectV3 (UInt32 index, Serializer *)
int GetObjectV2 (UInt32 index, Serializer *)
int GetObjectV1 (UInt32 index, Serializer *)
int GetObjectV1_1 (UInt32 index, Serializer *)
void ConvertToInt (const string &a, string &ret)
void ConvertDouble (const string &a, string &ret)
void ConvertToLowerNoWhiteSpace (const string &a, string &ret)
void GetRowLocation (pair< unsigned int, unsigned int > &rowLoc, const unsigned int rowIndex) const
void CacheRowLocation (const unsigned int rowIndex) const
void CreateSubtables (const unsigned int numRows)
void CreateSubtableColumns (const unsigned int colIndex, const vector< string > &col)
void CreateColumn (const unsigned int atColIndex, const vector< string > &col)
void Print (const string &indexName)
unsigned int GetColumnIndex (const string &colName) const

Private Attributes

string _name
vector< ITTable_ittables
ITTable::eOrientation _orient
StringCompare::eCompareType _colCaseSense
mapped_vector< string, StringCompare > _colNames
vector< unsigned int > _precision
vector< unsigned char > _compare_opts
vector< string > _indexNames
vector< vector< unsigned int > > _listsOfColumns
vector< unsigned int > _unique
Serializer * _ser
bool _modified
unsigned int _numRows
unsigned int _rowIndexCache
pair< unsigned int, unsigned
int > 
_rowLocCache

Static Private Attributes

static const unsigned int MAX_NUM_ITTABLE_ROWS = 1000
static const unsigned int EXPONENT = 4
static const unsigned int MAX_PRECISION = DBL_DIG
static const unsigned int MANTISSA = MAX_PRECISION + 2
static const unsigned int INT_LIMIT = 11
static const unsigned char DT_MASK = 15 << 4
static const unsigned char SC_MASK = 0x01
static const unsigned char WS_MASK = 0x02
static const unsigned char LAST_DT_VALUE = 3
static const unsigned int DEFAULT_PRECISION = MAX_PRECISION
static const unsigned char DEFAULT_OPTIONS
static const string _version


Detailed Description

Public class that respresents a two-dimensional table of strings.

This class represents a two-dimensional table of cells. Each cell holds a text string. The table is identified by its name. Rows are horizontal table entities identified by row indices, which are unsigned integers ranging from zero to the number of rows minus one. Columns are vertical table entities identified by (non-empty) column names. Column names can be case-sensitive (by default) or case-insensitive (customizable during construction). The class provides methods for table construction and destruction, assignment operator, equal operator, column and row based methods for addition, insertion, retrieval, update, deletion, cell based methods for update and retrieval, column search methods and table printing. Table cells are internally stored as vectors of text strings, where vectors can represent either columns (by default) or rows (customizable during construction).


Member Typedef Documentation

typedef ITTable::eOrientation ISTable::eOrientation

typedef ITTable::eSearchType ISTable::eSearchType

typedef ITTable::eSearchDir ISTable::eSearchDir


Member Enumeration Documentation

enum ISTable::eTableDiff

Enumerator:
eNONE 
eCASE_SENSE 
eMORE_COLS 
eLESS_COLS 
eCOL_NAMES 
eMORE_ROWS 
eLESS_ROWS 
eCELLS 
eMISSING 
eEXTRA 


Constructor & Destructor Documentation

ISTable::ISTable ( const StringCompare::eCompareType  colCaseSense = StringCompare::eCASE_SENSITIVE  ) 

Constructs a table.

Parameters:
[in] colCaseSense - optional parameter that indicates case sensitivity of column names. Possible values are case sensitive and case in-sensitive. If not specified, a table with case sensitive column names is constructed.
Returns:
Not applicable
Precondition:
None
Postcondition:
Constructed table has 0 rows and 0 columns.

Constructed table is nameless (its name is an empty string).

Exceptions:
 None

ISTable::ISTable ( eOrientation  orient,
const StringCompare::eCompareType  colCaseSense = StringCompare::eCASE_SENSITIVE 
)

Constructs a table.

Parameters:
[in] orient - table orientation. Possible values are row-wise orientation (vectors of strings represent table rows) and column-wise orientation (vectors of strings represent table columns)
[in] colCaseSense - optional parameter that indicates case sensitivity of column names. Possible values are case sensitive and case in-sensitive. If not specified, a table with case sensitive column names is constructed.
Returns:
Not applicable
Precondition:
None
Postcondition:
Constructed table has 0 rows and 0 columns.

Constructed table is nameless (its name is an empty string).

Exceptions:
 None

ISTable::ISTable ( const string &  name,
const StringCompare::eCompareType  colCaseSense = StringCompare::eCASE_SENSITIVE 
)

Constructs a table.

Parameters:
[in] name - the name of the table to be constructed
[in] colCaseSense - optional parameter that indicates case sensitivity of column names. Possible values are case sensitive and case in-sensitive. If not specified, a table with case sensitive column names is constructed.
Returns:
Not applicable
Precondition:
None
Postcondition:
Constructed table has 0 rows and 0 columns.
Exceptions:
 None

ISTable::ISTable ( const string &  name,
eOrientation  orient,
const StringCompare::eCompareType  colCaseSense = StringCompare::eCASE_SENSITIVE 
)

Constructs a table.

Parameters:
[in] name - the name of the table to be constructed
[in] orient - table orientation. Possible values are row-wise orientation (vectors of strings represent table rows) and column-wise orientation (vectors of strings represent table columns)
[in] colCaseSense - optional parameter that indicates case sensitivity of column names. Possible values are case sensitive and case in-sensitive. If not specified, a table with case sensitive column names is constructed.
Returns:
Not applicable
Precondition:
None
Postcondition:
Constructed table has 0 rows and 0 columns.
Exceptions:
 None

ISTable::ISTable ( const ISTable inTable  ) 

Constructs a table by copying from another table (copy constructor).

Parameters:
[in] inTable - reference to a table that will be copied to the newly constructed table
Returns:
Not applicable
Precondition:
None
Postcondition:
Constructed table is a clone (has the same name, internal cells orientation, case sensitivity, column names, content) as the table referenced by inTable.
Exceptions:
 None

ISTable::~ISTable (  ) 

Destructs a table, by releasing all the used resources.

Parameters:
 Not applicable
Returns:
Not applicable
Precondition:
None
Postcondition:
None
Exceptions:
 None


Member Function Documentation

ISTable & ISTable::operator= ( const ISTable inTable  ) 

Copies a table to another table (assignment operator).

Parameters:
[in] inTable - reference to the source table
Returns:
Reference to the destination table
Precondition:
None
Postcondition:
Constructed table is a clone (has the same name, internal cells orientation, case sensitivity, column names, content) as the table referenced by inTable.
Exceptions:
 None

ISTable::eTableDiff ISTable::operator== ( ISTable inTable  ) 

Compares a table to another table, ignoring the table name.

Parameters:
[in] inTable - reference to input table
Returns:
eNONE - if tables are identical

eCASE_SENSE - if tables have different column name case sensitivity

eMORE_COLS - if this table has more columns than input table

eLESS_COLS - if this table has less columns than input table

eCOL_NAMES - if tables have different column names

eMORE_ROWS - if this table has more rows than input table

eLESS_ROWS - if this table has less rows than input table

eCELLS - if tables have different content

Precondition:
None
Postcondition:
None
Exceptions:
 None

const string & ISTable::GetName (  )  const [inline]

Retrieves table name.

Parameters:
 None
Returns:
String that contains table name.
Precondition:
None
Postcondition:
None
Exceptions:
 None

void ISTable::SetName ( const string &  name  ) 

Changes the table name.

Parameters:
[in] name - the new name of the table
Returns:
None
Precondition:
None
Postcondition:
None
Exceptions:
 None

unsigned int ISTable::GetNumColumns (  )  const [inline]

Retrieves the number of columns in the table.

Parameters:
 None
Returns:
The number of columns in the table.
Precondition:
None
Postcondition:
None
Exceptions:
 None

const vector< string > & ISTable::GetColumnNames (  )  const

Retrieves column names.

Parameters:
[out] colNames - retrieved column names
Returns:
None
Precondition:
None
Postcondition:
None
Exceptions:
 None

bool ISTable::IsColumnPresent ( const string &  colName  ) 

Checks for column existence.

Parameters:
[in] colName - the name of the column
Returns:
true - if column exists

false - if column does not exist

Precondition:
colName must be non-empty
Postcondition:
None
Exceptions:
EmptyValueException - if colName is empty

void ISTable::AddColumn ( const string &  colName,
const vector< string > &  col = vector< string >(0) 
)

Adds a column to the end of the table.

Parameters:
[in] colName - the name of the column to be added
[in] col - optional parameter that contains the values which are to be used to fill in the newly added column. If col is specified, filling starts at row index 0 and continues until size of col. If col is not specified, the newly added column is filled with empty values, where filling starts at row index 0 and ends at row index "number of rows - 1".
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must not be present

If col is specified, the size of col must be less than or equal to the number of rows.

Postcondition:
If table is empty (0 rows) and col is specified, the number of rows is set to the size of col. Otherwise, the number of rows is unchanged.
Exceptions:
EmptyValueException - if colName is empty
AlreadyExistsException - if column with name colName already exists
out_of_range - if size of col is greater than the number of rows

void ISTable::InsertColumn ( const string &  colName,
const string &  afColName,
const vector< string > &  col = vector< string >(0) 
)

Inserts a new column at the specified existing column and shifts, to the right by one, the specified existing column and all columns after it.

Parameters:
[in] colName - the name of the column to be inserted
[in] atColName - the name of the column at which the new column is to be inserted
[in] col - optional parameter that contains the values which are to be used to fill in the newly inserted column. If col is specified, filling starts at row index 0 and continues until size of col. If col is not specified, the newly inserted column is filled with empty values, where filling starts at row index 0 and ends at row index "number of rows - 1".
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must not be present

atColName must be non-empty

Column with name atColName must be present

If col is specified, the size of col must be less than or equal to the number of rows.

The column which comes, in order, before the column with name atColName, must be non-empty. This is to prevent creation of non-rectangular tables.

Postcondition:
If table is empty (0 rows) and col is specified, the number of rows is set to the size of col. Otherwise, the number of rows is unchanged.
Exceptions:
EmptyValueException - if colName is empty
AlreadyExistsException - if column with name colName already exists
EmptyValueException - if atColName is empty
NotFoundException - if column with name atColName does not exist
out_of_range - if size of col is greater than the number of rows
out_of_range - if column, which comes, in order, before the column with name atColName, is empty.

void ISTable::FillColumn ( const string &  colName,
const vector< string > &  col 
)

Fills a column with values.

Parameters:
[in] colName - the name of the column to be filled
[in] col - contains the values which are to be used for filling. Filling starts at row index 0 and continues until size of col.
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

The size of col must be less than or equal to the number of rows.

The column which comes, in order, before the column with name colName, must be non-empty. This is to prevent creation of non-rectangular tables.

Postcondition:
If table is empty (0 rows), the number of rows is set to the size of col. Otherwise, the number of rows is unchanged.
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist
out_of_range - if size of col is greater than the number of rows
out_of_range - if column, which comes, in order, before the column with name colName, is empty.

void ISTable::GetColumn ( vector< string > &  col,
const string &  colName 
)

Retrieves column values.

Parameters:
[out] col - retrieved column values
[in] colName - the name of the column which content is to be retrieved.
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

Postcondition:
None
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist

void ISTable::GetColumn ( vector< string > &  col,
const string &  colName,
const unsigned int  fromRowIndex,
unsigned int  toRowIndex 
)

Retrieves column values in the specified row range.

Parameters:
[out] col - retrieved values
[in] colName - the name of the column which content is to be retrieved.
[in] fromRowIndex - the row index of the first cell in the column to be retrieved.
[in] toRowIndex - the row index of the last cell in the column to be retrieved.
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

fromRowIndex must be less than or equal to the column length

toRowIndex must be less than or equal to the column length

fromRowIndex must be less than or equal to the toRowIndex

Postcondition:
None
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist
out_of_range - if fromRowIndex is greater than the column length
out_of_range - if toRowIndex is greater than the column length
out_of_range - if fromRowIndex is greater than toRowIndex

void ISTable::GetColumn ( vector< string > &  col,
const string &  colName,
const vector< unsigned int > &  rowIndex 
)

Retrieves column values in the specified rows.

Parameters:
[out] col - retrieved values
[in] colName - the name of the column which content is to be retrieved
[in] rowIndices - row indices of column cells to be retrieved
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

Row indices in rowIndices must be less than or equal to the column length

Postcondition:
None
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist
out_of_range - if at least one row index in rowIndices is greater than the column length

void ISTable::RenameColumn ( const string &  oldColName,
const string &  newColName 
)

Changes the column name.

Parameters:
[in] oldColName - the name of the column which is to be renamed
[in] newColName - the new column name
Returns:
None
Precondition:
oldColName must be non-empty

Column with name oldColName must be present

newColName must be non-empty

Column with name newColName must not be present

Postcondition:
None
Exceptions:
EmptyValueException - if oldColName is empty
NotFoundException - if column with name oldColName does not exist
EmptyValueException - if newColName is empty
AlreadyExistsException - if column with name newColName already exists

void ISTable::ClearColumn ( const string &  colName  ) 

Sets all cells in the column to empty string.

Parameters:
[in] colName - the name of the column
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

Postcondition:
Column length is unchanged.
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist

void ISTable::DeleteColumn ( const string &  colName  ) 

Deletes a column from the table.

Parameters:
[in] colName - the name of the column
Returns:
None
Precondition:
colName must be non-empty

Column with name colName must be present

Postcondition:
The number of table columns is reduced by one.
Exceptions:
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist

unsigned int ISTable::GetNumRows (  )  const [inline]

Retrieves the number of rows in the table.

Parameters:
 None
Returns:
The number of rows in the table.
Precondition:
None
Postcondition:
None
Exceptions:
 None

unsigned int ISTable::AddRow ( const vector< string > &  row = vector< string >(0)  ) 

Adds a row to the end of the table. For an empty table (0 rows), the number of inserted cells is equal to the number of table columns. For a non-empty table, the number of inserted cells is equal to the number of non-empty columns (this is in order to prevent creation of non-rectangular tables). The newly added row is, optionally, filled with values, starting at the first column.

Parameters:
[in] row - optional parameter that contains the values which are to be used to fill in the newly added row. If row is specified, filling starts at the first column and continues until size of row is reached. If row is not specified and table is empty, the newly inserted row is filled with empty values, where filling starts at the first column and continues until the number of columns is reached. If row is not specified and table is not empty, the newly inserted row is filled with empty values, where filling starts at the first column and continues until the number of non-empty columns is reached.
Returns:
The new number of rows after the row addition.
Precondition:
Table must have at least one column, which can be empty.

If table is not empty and row is specified, the size of row must be less than or equal to the number of non-empty columns. This is in order to prevent creation of non-rectangular tables.

If table is empty and row is specified, the size of row must be less than or equal to the number of columns.

Postcondition:
The number of rows is increased by one.
Exceptions:
EmptyContainerException - if table has no columns.
out_of_range - if table is not empty and size of row is greater than the number of non-empty columns.
out_of_range - if table is empty and size of row is greater than the number of columns.

unsigned int ISTable::InsertRow ( const unsigned int  atRowIndex,
const vector< string > &  row = vector< string >(0) 
)

Inserts a row at the specified row index and shifts, down by one, the old row and all other rows below it. For an empty table (0 rows), the number of inserted cells is equal to the number of table columns. For a non-empty table, the number of inserted cells is equal to the number of non-empty columns (this is in order to prevent creation of non-rectangular tables). The newly inserted row is optionally filled with values, starting at the first column.

Parameters:
[in] atRowIndex - index of the row at which the new row is to be inserted. Note: If atRowIndex is equal to the number of rows, the operation of this method is equivalent to AddRow().
[in] row - optional parameter that contains the values which are to be used to fill in the newly inserted row. If row is specified, filling starts at the first column and continues until size of row is reached. If row is not specified and table is empty, the newly inserted row is filled with empty values, where filling starts at the first column and continues until the number of columns is reached. If row is not specified and table is not empty, the newly inserted row is filled with empty values, where filling starts at the first column and continues until the number of non-empty columns is reached.
Returns:
The new number of rows after the row insertion.
Precondition:
Table must have at least one column, which can be empty.

atRowIndex must be greater than or equal to 0 and less than or equal to the number of table rows.

If table is not empty and row is specified, the size of row must be less than or equal to the number of non-empty columns. This is in order to prevent creation of non-rectangular tables.

If table is empty and row is specified, the size of row must be less than or equal to the number of columns.

Postcondition:
The number of rows is increased by one.

Row indices, of the rows below the inserted row, are invalidated by being increased by one.

Exceptions:
EmptyContainerException - if table has no columns.
out_of_range - if atRowIndex is greater than the number of table rows.
out_of_range - if table is not empty and size of row is greater than the number of non-empty columns.
out_of_range - if table is empty and size of row is greater than the number of columns.

void ISTable::FillRow ( const unsigned int  rowIndex,
const vector< string > &  row 
)

Fills, with values, a row at the specified row index, starting at the the first column.

Parameters:
[in] rowIndex - index of the row that is to be filled.
[in] row - values which are to be used to fill in the row. Filling starts at the first column and continues until size of row is reached.
Returns:
None
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.

The size of row must be less than or equal to the number of non-empty columns. This is in order to prevent creation of non-rectangular tables.

Postcondition:
None
Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.
out_of_range - if size of row is greater than the number of non-empty columns.

void ISTable::GetRow ( vector< string > &  row,
const unsigned int  rowIndex,
const string &  fromColName = String::Empty,
const string &  toColName = String::Empty 
)

Retrieves row values.

Parameters:
[out] row - retrieved row values
[in] rowIndex - index of the row which values are to be retrieved.
[in] fromColName - optional parameter which specifies the location of the first cell to be retrieved. If not specified the first column cell is used.
[in] toColName - optional parameter which specifies the location of the last cell to be retrieved. If not specified the last non-empty-column cell is used.
Returns:
None
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.

If fromColName is specified, the column with name fromColName must be present and must be non-empty

If toColName is specified, the column with name toColName must be present and must be non-empty

If fromColName is different than toColName, it must come prior to it in the column order.

Postcondition:
None
Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.
NotFoundException - If fromColName is specified and column with name fromColName does not exist
NotFoundException - If toColName is specified and column with name toColName does not exist
out_of_range - If fromColName is specified and column with name fromColName exists but is empty
out_of_range - If toColName is specified and column with name toColName exists but is empty
out_of_range - if fromColName is different than toColName and it comes after it in the column order.

const vector< string > & ISTable::GetRow ( const unsigned int  rowIndex  ) 

Retrieves a constant reference to a row of values the table.

Parameters:
[in] rowIndex - index of a row to which a reference is to be retrieved.
Returns:
Constant reference to the row of values in the table.
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.
Postcondition:
None
Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.

void ISTable::ClearRow ( const unsigned int  rowIndex  ) 

Sets all cells in the row to empty string.

Parameters:
[in] rowIndex - index of the row that is to be cleared.
Returns:
None
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.
Postcondition:
Number of table rows is unchanged.
Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.

void ISTable::DeleteRow ( const unsigned int  rowIndex  ) 

Deletes a row with the specified index and shifts, up by one, all other rows below it.

Parameters:
[in] rowIndex - index of the row that is to be deleted.
Returns:
None
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.
Postcondition:
Number of table rows is reduced by one.

Row indices of the rows which are below the deleted row are invalidated by being reduced by one.

Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.

void ISTable::DeleteRows ( const vector< unsigned int > &  rows  ) 

Deletes rows with specified indices.

Parameters:
[in] rows - indices of rows that are to be deleted.
Returns:
None
Precondition:
indices in rows must be greater than or equal to 0 and less than the number of table rows.
Postcondition:
Number of table rows is reduced by the size of rows.

Row indices of the remaining rows are invalidated by being appropriatelly adjusted.

Exceptions:
out_of_range - if any row index in rows is greater than or equal to the number of table rows.

unsigned int ISTable::GetLastRowIndex (  )  [inline]

Retrieves the row index of the last row in the table.

Parameters:
 None
Returns:
The index of the last row in the table.
Precondition:
None
Postcondition:
None
Exceptions:
 None

void ISTable::UpdateCell ( const unsigned int  rowIndex,
const string &  colName,
const string &  value 
)

Updates a cell in the table.

Parameters:
[in] rowIndex - row index of the cell that is to be updated
[in] colName - the name of the column of the cell that is to be updated
[in] value - the new value
Returns:
None
Precondition:
rowIndex must be greater than or equal to 0 and less than the number of table rows.

colName must be non-empty

Column with name colName must be present

Postcondition:
None
Exceptions:
out_of_range - if rowIndex is greater than or equal to the number of table rows.
EmptyValueException - if colName is empty
NotFoundException - if column with name colName does not exist

const string &am