You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

264 lines
7.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkTable.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkTable
* @brief A table, which contains similar-typed columns of data
*
*
* vtkTable is a basic data structure for storing columns of data.
* Internally, columns are stored in a vtkDataSetAttributes structure called
* RowData. However, using the vtkTable API additionally ensures that every column
* has the same number of entries, and provides row access (using vtkVariantArray)
* and single entry access (using vtkVariant).
*
* The field data inherited from vtkDataObject may be used to store metadata
* related to the table.
*
* @warning
* You should use the vtkTable API to change the table data. Performing
* operations on the object returned by GetRowData() may
* yield unexpected results. vtkTable does allow the user to set the field
* data using SetRowData(); the number of rows in the table is determined
* by the number of tuples in the first array (it is assumed that all arrays
* are the same length).
*
* @warning
* Each column added with AddColumn <b>must</b> have its name set to a unique,
* non-empty string in order for GetValue() to function properly.
*
* @par Thanks:
* Thanks to Patricia Crossno, Ken Moreland, Andrew Wilson and Brian Wylie from
* Sandia National Laboratories for their help in developing this class API.
*/
#ifndef vtkTable_h
#define vtkTable_h
#include "vtkCommonDataModelModule.h" // For export macro
#include "vtkDataObject.h"
class vtkAbstractArray;
class vtkDataSetAttributes;
class vtkVariant;
class vtkVariantArray;
class VTKCOMMONDATAMODEL_EXPORT vtkTable : public vtkDataObject
{
public:
static vtkTable* New();
vtkTypeMacro(vtkTable, vtkDataObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Dump table contents. If rowLimit is -1 then the full table
* is printed out (Default). If rowLimit is 0 then only the
* header row will be displayed. Otherwise, if rowLimit > 0
* then Dump will print the first rowLimit rows of data.
*/
void Dump(unsigned int colWidth = 16, int rowLimit = -1);
/**
* Return what type of dataset this is.
*/
int GetDataObjectType() override { return VTK_TABLE; }
/**
* Return the actual size of the data in kibibytes (1024 bytes). This number
* is valid only after the pipeline has updated. The memory size
* returned is guaranteed to be greater than or equal to the
* memory required to represent the data (e.g., extra space in
* arrays, etc. are not included in the return value).
*/
unsigned long GetActualMemorySize() override;
//@{
/**
* Get/Set the main data (columns) of the table.
*/
vtkGetObjectMacro(RowData, vtkDataSetAttributes);
virtual void SetRowData(vtkDataSetAttributes* data);
//@}
//
// Row functions
//
/**
* Get the number of rows in the table.
*/
vtkIdType GetNumberOfRows();
/**
* Set the number of rows in the table. Note that memory allocation might be performed
* as a result of this, but no memory will be released.
*/
void SetNumberOfRows(const vtkIdType);
/**
* Get a row of the table as a vtkVariantArray which has one entry for each column.
* NOTE: This version of the method is NOT thread safe.
*/
vtkVariantArray* GetRow(vtkIdType row);
/**
* Get a row of the table as a vtkVariantArray which has one entry for each column.
*/
void GetRow(vtkIdType row, vtkVariantArray* values);
/**
* Set a row of the table with a vtkVariantArray which has one entry for each column.
*/
void SetRow(vtkIdType row, vtkVariantArray* values);
/**
* Insert a blank row at the end of the table.
*/
vtkIdType InsertNextBlankRow(double default_num_val = 0.0);
/**
* Insert a row specified by a vtkVariantArray. The number of entries in the array
* should match the number of columns in the table.
*/
vtkIdType InsertNextRow(vtkVariantArray* arr);
/**
* Delete a row from the table. Rows below the deleted row are shifted up.
*/
void RemoveRow(vtkIdType row);
//
// Column functions
//
/**
* Get the number of columns in the table.
*/
vtkIdType GetNumberOfColumns();
// Get the name of a column of the table.
const char* GetColumnName(vtkIdType col);
/**
* Get a column of the table by its name.
*/
vtkAbstractArray* GetColumnByName(const char* name);
/**
* Get a column of the table by its column index.
*/
vtkAbstractArray* GetColumn(vtkIdType col);
/**
* Add a column to the table.
*/
void AddColumn(vtkAbstractArray* arr);
/**
* Remove a column from the table by its name.
*/
void RemoveColumnByName(const char* name);
/**
* Remove a column from the table by its column index.
*/
void RemoveColumn(vtkIdType col);
//
// Table single entry functions
//
/**
* Retrieve a value in the table by row and column index as a variant.
* Note that this calls GetValueByName internally so that each column
* array must have its name set (and that name should be unique within
* the table).
*/
vtkVariant GetValue(vtkIdType row, vtkIdType col);
/**
* Retrieve a value in the table by row index and column name as a variant.
*/
vtkVariant GetValueByName(vtkIdType row, const char* col);
/**
* Set a value in the table by row and column index as a variant.
*/
void SetValue(vtkIdType row, vtkIdType col, vtkVariant value);
/**
* Set a value in the table by row index and column name as a variant.
*/
void SetValueByName(vtkIdType row, const char* col, vtkVariant value);
/**
* Initialize to an empty table.
*/
void Initialize() override;
//@{
/**
* Retrieve the table from vtkInformation.
*/
static vtkTable* GetData(vtkInformation* info);
static vtkTable* GetData(vtkInformationVector* v, int i = 0);
//@}
//@{
/**
* Shallow/deep copy the data from src into this object.
*/
void ShallowCopy(vtkDataObject* src) override;
void DeepCopy(vtkDataObject* src) override;
//@}
/**
* Returns the attributes of the data object as a vtkFieldData.
* This returns non-null values in all the same cases as GetAttributes,
* in addition to the case of FIELD, which will return the field data
* for any vtkDataObject subclass.
*/
vtkFieldData* GetAttributesAsFieldData(int type) override;
/**
* Get the number of elements for a specific attribute type (ROW, etc.).
*/
vtkIdType GetNumberOfElements(int type) override;
protected:
vtkTable();
~vtkTable() override;
/**
* Holds the column data of the table.
*/
vtkDataSetAttributes* RowData;
/**
* Holds row information returned by GetRow().
*/
vtkVariantArray* RowArray;
private:
vtkTable(const vtkTable&) = delete;
void operator=(const vtkTable&) = delete;
};
#endif