Shadowrun: Awakened 29 September 2011 - Build 871
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
DataStructures::Table Class Reference

Holds a set of columns, a set of rows, and rows times columns cells. More...

#include <DS_Table.h>

List of all members.

Classes

struct  Cell
 Holds the actual data in the table. More...
struct  ColumnDescriptor
struct  FilterQuery
struct  Row
 Stores the list of cells for this row, and a special flag used for internal sorting. More...
struct  SortQuery

Public Types

enum  ColumnType { NUMERIC, STRING, BINARY, POINTER }
enum  FilterQueryType {
  QF_EQUAL, QF_NOT_EQUAL, QF_GREATER_THAN, QF_GREATER_THAN_EQ,
  QF_LESS_THAN, QF_LESS_THAN_EQ, QF_IS_EMPTY, QF_NOT_EMPTY
}
enum  SortQueryType { QS_INCREASING_ORDER, QS_DECREASING_ORDER }
 Increasing or decreasing sort order. More...

Public Member Functions

unsigned AddColumn (const char columnName[64], ColumnType columnType)
 Adds a column to the table.
Table::RowAddRow (unsigned rowId)
 Adds a row to the table.
Table::RowAddRow (unsigned rowId, DataStructures::List< Cell > &initialCellValues)
Table::RowAddRow (unsigned rowId, DataStructures::List< Cell * > &initialCellValues, bool copyCells=false)
void Clear (void)
 Frees all memory in the table.
unsigned ColumnIndex (char columnName[64]) const
 Gets the index of a column by name.
unsigned ColumnIndex (const char *columnName) const
char * ColumnName (unsigned index) const
 Gives the string name of the column at a certain index.
unsigned GetAvailableRowId (void) const
 Get the first free row id. This could be made more efficient.
void GetCellValueByIndex (unsigned rowIndex, unsigned columnIndex, int *output)
 Note this is much less efficient to call than GetRow, then working with the cells directly. Numeric, string, binary.
void GetCellValueByIndex (unsigned rowIndex, unsigned columnIndex, char *output)
void GetCellValueByIndex (unsigned rowIndex, unsigned columnIndex, char *output, int *outputLength)
unsigned GetColumnCount (void) const
const DataStructures::List
< ColumnDescriptor > & 
GetColumns (void) const
 Direct access to make things easier.
ColumnType GetColumnType (unsigned index) const
 Returns the type of a column, referenced by index.
DataStructures::Page< unsigned,
Row *, 16 > * 
GetListHead (void)
 Get the head of a linked list containing all the row data.
RowGetRowByID (unsigned rowId) const
 Gets a row. More efficient to do this and access Row::cells than to repeatedly call GetCell. You can also update cells in rows from this function.
RowGetRowByIndex (unsigned rowIndex, unsigned *key) const
 Gets a row at a specific index. rowIndex should be less than GetRowCount()
unsigned GetRowCount (void) const
const
DataStructures::BPlusTree
< unsigned, Row *, 16 > & 
GetRows (void) const
 Direct access to make things easier.
Tableoperator= (const Table &input)
void PrintColumnHeaders (char *out, int outLength, char columnDelineator) const
 Prints out the names of all the columns.
void PrintRow (char *out, int outLength, char columnDelineator, bool printDelineatorForBinary, Table::Row *inputRow) const
 Writes a text representation of the row to out.
void QueryTable (unsigned *columnIndicesSubset, unsigned numColumnSubset, FilterQuery *inclusionFilters, unsigned numInclusionFilters, unsigned *rowIds, unsigned numRowIDs, Table *result)
 Queries the table, optionally returning only a subset of columns and rows.
void RemoveColumn (unsigned columnIndex)
 Removes a column by index.
bool RemoveRow (unsigned rowId)
 Removes a row specified by rowId.
void RemoveRows (Table *tableContainingRowIDs)
 Removes all the rows with IDs that the specified table also has.
void SortTable (Table::SortQuery *sortQueries, unsigned numSortQueries, Table::Row **out)
 Sorts the table by rows.
 Table ()
bool UpdateCell (unsigned rowId, unsigned columnIndex, int value)
 Updates a particular cell in the table.
bool UpdateCell (unsigned rowId, unsigned columnIndex, int byteLength, char *data)
bool UpdateCell (unsigned rowId, unsigned columnIndex, char *str)
bool UpdateCellByIndex (unsigned rowIndex, unsigned columnIndex, char *str)
bool UpdateCellByIndex (unsigned rowIndex, unsigned columnIndex, int value)
bool UpdateCellByIndex (unsigned rowIndex, unsigned columnIndex, int byteLength, char *data)
 ~Table ()

Protected Member Functions

Table::RowAddRowColumns (unsigned rowId, Row *row, DataStructures::List< unsigned > columnIndices)
void DeleteRow (Row *row)
void QueryRow (DataStructures::List< unsigned > &inclusionFilterColumnIndices, DataStructures::List< unsigned > &columnIndicesToReturn, unsigned key, Table::Row *row, FilterQuery *inclusionFilters, Table *result)

Protected Attributes

DataStructures::List
< ColumnDescriptor
columns
DataStructures::BPlusTree
< unsigned, Row *, 16 > 
rows

Detailed Description

The table data structure is useful if you want to store a set of structures and perform queries on those structures.
This is a relatively simple and fast implementation of the types of tables commonly used in databases.
See TableSerializer to serialize data members of the table.
See LightweightDatabaseClient and LightweightDatabaseServer to transmit the table over the network.

Definition at line 33 of file DS_Table.h.


Member Enumeration Documentation

Enumerator:
NUMERIC 
STRING 
BINARY 
POINTER 

Definition at line 37 of file DS_Table.h.

        {
            // Cell::i used
            NUMERIC,

            // Cell::c used to hold a null terminated string.
            STRING,

            // Cell::c holds data.  Cell::i holds data length of c in bytes.
            BINARY,

            // Cell::c holds data.  Not deallocated. Set manually by assigning ptr.
            POINTER,
        };
Enumerator:
QF_EQUAL 
QF_NOT_EQUAL 
QF_GREATER_THAN 
QF_GREATER_THAN_EQ 
QF_LESS_THAN 
QF_LESS_THAN_EQ 
QF_IS_EMPTY 
QF_NOT_EMPTY 

Definition at line 132 of file DS_Table.h.

Enumerator:
QS_INCREASING_ORDER 
QS_DECREASING_ORDER 

Definition at line 160 of file DS_Table.h.


Constructor & Destructor Documentation

DataStructures::Table::Table ( )
DataStructures::Table::~Table ( )

Member Function Documentation

unsigned DataStructures::Table::AddColumn ( const char  columnName[64],
ColumnType  columnType 
)
Parameters:
[in]columnNameThe name of the column
[in]columnTypeWhat type of data this column will hold
Returns:
The index of the new column
Table::Row* DataStructures::Table::AddRow ( unsigned  rowId)

New rows are added with empty values for all cells. However, if you specify initialCelLValues you can specify initial values It's up to you to ensure that the values in the specific cells match the type of data used by that row rowId can be considered the primary key for the row. It is much faster to lookup a row by its rowId than by searching keys. rowId must be unique Rows are stored in sorted order in the table, using rowId as the sort key

Parameters:
[in]rowIdThe UNIQUE primary key for the row. This can never be changed.
[in]initialCellValuesInitial values to give the row (optional)
Returns:
The newly added row
Table::Row* DataStructures::Table::AddRow ( unsigned  rowId,
DataStructures::List< Cell > &  initialCellValues 
)
Table::Row* DataStructures::Table::AddRow ( unsigned  rowId,
DataStructures::List< Cell * > &  initialCellValues,
bool  copyCells = false 
)
Table::Row* DataStructures::Table::AddRowColumns ( unsigned  rowId,
Row row,
DataStructures::List< unsigned >  columnIndices 
) [protected]
void DataStructures::Table::Clear ( void  )
unsigned DataStructures::Table::ColumnIndex ( const char *  columnName) const
unsigned DataStructures::Table::ColumnIndex ( char  columnName[64]) const

Column indices are stored in the order they are added.

Parameters:
[in]columnNameThe name of the column
Returns:
The index of the column, or (unsigned)-1 if no such column
char* DataStructures::Table::ColumnName ( unsigned  index) const
Parameters:
[in]indexThe index of the column
Returns:
The name of the column, or 0 if an invalid index
void DataStructures::Table::DeleteRow ( Row row) [protected]
unsigned DataStructures::Table::GetAvailableRowId ( void  ) const
void DataStructures::Table::GetCellValueByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
int *  output 
)
void DataStructures::Table::GetCellValueByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
char *  output 
)
void DataStructures::Table::GetCellValueByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
char *  output,
int *  outputLength 
)
unsigned DataStructures::Table::GetColumnCount ( void  ) const

Returns the number of columns

Returns:
The number of columns in the table
const DataStructures::List<ColumnDescriptor>& DataStructures::Table::GetColumns ( void  ) const
ColumnType DataStructures::Table::GetColumnType ( unsigned  index) const
Parameters:
[in]indexThe index of the column
Returns:
The type of the column
DataStructures::Page<unsigned, Row*, 16 >* DataStructures::Table::GetListHead ( void  )
Row* DataStructures::Table::GetRowByID ( unsigned  rowId) const
Parameters:
[in]rowIdThe ID of the row
Returns:
The desired row, or 0 if no such row.
Row* DataStructures::Table::GetRowByIndex ( unsigned  rowIndex,
unsigned *  key 
) const
Parameters:
[in]rowIndexThe index of the row
[out]keyThe ID of the row returned
Returns:
The desired row, or 0 if no such row.
unsigned DataStructures::Table::GetRowCount ( void  ) const

Returns the number of rows

Returns:
The number of rows in the table
const DataStructures::BPlusTree<unsigned, Row*, 16 >& DataStructures::Table::GetRows ( void  ) const
Table& DataStructures::Table::operator= ( const Table input)
void DataStructures::Table::PrintColumnHeaders ( char *  out,
int  outLength,
char  columnDelineator 
) const
Parameters:
[out]outA pointer to an array of bytes which will hold the output.
[in]outLengthThe size of the out array
[in]columnDelineatorWhat character to print to delineate columns
void DataStructures::Table::PrintRow ( char *  out,
int  outLength,
char  columnDelineator,
bool  printDelineatorForBinary,
Table::Row inputRow 
) const
Parameters:
[out]outA pointer to an array of bytes which will hold the output.
[in]outLengthThe size of the out array
[in]columnDelineatorWhat character to print to delineate columns
[in]printDelineatorForBinaryBinary output is not printed. True to still print the delineator.
[in]inputRowThe row to print
void DataStructures::Table::QueryRow ( DataStructures::List< unsigned > &  inclusionFilterColumnIndices,
DataStructures::List< unsigned > &  columnIndicesToReturn,
unsigned  key,
Table::Row row,
FilterQuery inclusionFilters,
Table result 
) [protected]
void DataStructures::Table::QueryTable ( unsigned *  columnIndicesSubset,
unsigned  numColumnSubset,
FilterQuery inclusionFilters,
unsigned  numInclusionFilters,
unsigned *  rowIds,
unsigned  numRowIDs,
Table result 
)
Parameters:
[in]columnSubsetAn array of column indices. Only columns in this array are returned. Pass 0 for all columns
[in]numColumnSubsetThe number of elements in columnSubset
[in]inclusionFiltersAn array of FilterQuery. All filters must pass for the row to be returned.
[in]numInclusionFiltersThe number of elements in inclusionFilters
[in]rowIdsAn arrow of row IDs. Only these rows with these IDs are returned. Pass 0 for all rows.
[in]numRowIDsThe number of elements in rowIds
[out]resultThe result of the query. If no rows are returned, the table will only have columns.
void DataStructures::Table::RemoveColumn ( unsigned  columnIndex)
Parameters:
[in]columnIndexThe index of the column to remove
bool DataStructures::Table::RemoveRow ( unsigned  rowId)
Parameters:
[in]rowIdThe ID of the row
Returns:
true if the row was deleted. False if not.
void DataStructures::Table::RemoveRows ( Table tableContainingRowIDs)
Parameters:
[in]tableContainingRowIDsThe IDs of the rows
void DataStructures::Table::SortTable ( Table::SortQuery sortQueries,
unsigned  numSortQueries,
Table::Row **  out 
)

You can sort the table in ascending or descending order on one or more columns Columns have precedence in the order they appear in the sortQueries array If a row cell on column n has the same value as a a different row on column n, then the row will be compared on column n+1

Parameters:
[in]sortQueriesA list of SortQuery structures, defining the sorts to perform on the table
[in]numColumnSubsetThe number of elements in numSortQueries
[out]outThe address of an array of Rows, which will receive the sorted output. The array must be long enough to contain all returned rows, up to GetRowCount()
bool DataStructures::Table::UpdateCell ( unsigned  rowId,
unsigned  columnIndex,
char *  str 
)
bool DataStructures::Table::UpdateCell ( unsigned  rowId,
unsigned  columnIndex,
int  value 
)
Note:
If you are going to update many cells of a particular row, it is more efficient to call GetRow and perform the operations on the row directly.
Row pointers do not change, so you can also write directly to the rows for more efficiency.
Parameters:
[in]rowIdThe ID of the row
[in]columnIndexThe column of the cell
[in]valueThe data to set
bool DataStructures::Table::UpdateCell ( unsigned  rowId,
unsigned  columnIndex,
int  byteLength,
char *  data 
)
bool DataStructures::Table::UpdateCellByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
char *  str 
)
bool DataStructures::Table::UpdateCellByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
int  value 
)
bool DataStructures::Table::UpdateCellByIndex ( unsigned  rowIndex,
unsigned  columnIndex,
int  byteLength,
char *  data 
)

Member Data Documentation

Definition at line 335 of file DS_Table.h.

Definition at line 332 of file DS_Table.h.


The documentation for this class was generated from the following file:

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net