14#include "MantidDataObjects/DllConfig.h"
20#include <boost/tuple/tuple.hpp>
27namespace DataObjects {
75 std::unique_ptr<TableWorkspace>
clone()
const {
return std::unique_ptr<TableWorkspace>(doClone()); }
78 std::unique_ptr<TableWorkspace>
cloneEmpty()
const {
return std::unique_ptr<TableWorkspace>(doCloneEmpty()); }
81 const std::string
id()
const override {
return "TableWorkspace"; }
83 size_t getMemorySize()
const override;
87 void removeColumn(
const std::string &
name)
override;
89 size_t columnCount()
const override {
return static_cast<int>(m_columns.size()); }
99 std::vector<std::string> getColumnNames()
const override;
101 size_t rowCount()
const override {
return m_rowCount; }
117 return pTableCol->
data();
119 throw std::runtime_error(
"TableWorkspace::getColVector(): Can not cast "
120 "to proper TableCol type");
127 return pTableCol->
data();
129 throw std::runtime_error(
"TableWorkspace::getColVector()const: Can not "
130 "cast to proper TableCol type");
141 auto ci = std::find_if(m_columns.begin(), m_columns.end(),
FindName(
name));
142 if (ci == m_columns.end())
143 throw(std::runtime_error(
"column with name: " +
name +
" does not exist"));
146 return pTableCol->
data();
148 throw std::runtime_error(
"TableWorkspace::getColVector(): Can not cast "
149 "to proper TableCol type");
154 auto ci = std::find_if(m_columns.begin(), m_columns.end(),
FindName(
name));
155 if (ci == m_columns.end())
156 throw(std::runtime_error(
"column with name: " +
name +
" does not exist"));
159 return pTableCol->
data();
161 throw std::runtime_error(
"TableWorkspace::getColVector()const: Can not "
162 "cast to proper TableCol type");
172 auto ci = std::find_if(m_columns.begin(), m_columns.end(),
FindName(
name));
173 if (ci == m_columns.end())
189 auto ci = std::find_if(m_columns.begin(), m_columns.end(),
FindName(
name));
190 if (ci == m_columns.end())
200 void setRowCount(
size_t count)
final;
203 size_t insertRow(
size_t index)
override;
205 void removeRow(
size_t index)
override;
213 void find(
size_t value,
size_t &row,
size_t col)
override { findValue(
value, row, col); }
220 void find(
const std::string &
value,
size_t &row,
size_t col)
override { findValue(
value, row, col); }
227 void find(
float value,
size_t &row,
size_t col)
override { findValue(
value, row, col); }
241 void find(
double value,
size_t &row,
size_t col)
override { findValue(
value, row, col); }
253 template <
class U> U
cell_cast(
size_t nRow,
size_t nCol)
const {
255 return static_cast<U
>(spCol->operator[](nRow));
257 template <
class U> U
cell_cast(
size_t nRow,
const std::string &col_name)
const {
259 return static_cast<U
>(spCol->operator[](nRow));
263 void sort(std::vector<std::pair<std::string, bool>> &criteria)
override;
274 TableWorkspace *doCloneColumns(
const std::vector<std::string> &colNames)
const override;
277 template <
typename Type>
void findValue(
const Type
value,
size_t &row,
size_t colIndex) {
281 std::vector<Type> dataVec = tc_sptr->data();
282 typename std::vector<Type>::iterator itr;
283 itr = std::find(dataVec.begin(), dataVec.end(),
value);
284 if (itr != dataVec.end()) {
285 std::vector<int>::difference_type pos;
286 pos = std::distance(dataVec.begin(), itr);
288 row =
static_cast<int>(pos);
291 throw std::out_of_range(
"Search object not found in table workspace");
293 }
catch (std::range_error &) {
295 }
catch (std::runtime_error &) {
300 void addColumn(
const std::shared_ptr<API::Column> &column);
310 bool operator()(std::shared_ptr<API::Column> &cp)
const {
return cp->name() == m_name; }
311 bool operator()(
const std::shared_ptr<const API::Column> &cp)
const {
return cp->name() == m_name; }
314 using column_it = std::vector<std::shared_ptr<API::Column>>::iterator;
336#ifndef DataObjects_EXPORTS
340extern template class MANTID_DATAOBJECTS_DLL WorkspaceProperty<DataObjects::TableWorkspace>;
double value
The value of the point.
std::map< DeltaEMode::Type, std::string > index
MANTID_DATAOBJECTS_EXTERN_TEMPLATE(Mantid::Kernel::PropertyWithValue< std::shared_ptr< Mantid::DataObjects::TableWorkspace > >)
ITableWorkspace is an implementation of Workspace in which the data are organised in columns of same ...
Shared pointer to a column with automatic type cast and data type check.
Class TableColumn implements abstract class Column for any copyable data type.
Type * dataArray()
Pointer to the data array.
std::vector< Type > & data()
Reference to the data.
Used in std::find_if algorithm to find a Column with name name.
bool operator()(std::shared_ptr< API::Column > &cp) const
Comparison operator.
bool operator()(const std::shared_ptr< const API::Column > &cp) const
std::string m_name
Name to find.
FindName(const std::string &name)
Constructor.
TableWorkspace is an implementation of Workspace in which the data are organised in columns of same s...
size_t columnCount() const override
Number of columns in the workspace.
std::vector< std::shared_ptr< API::Column > >::const_iterator column_const_it
U cell_cast(size_t nRow, const std::string &col_name) const
void find(double value, size_t &row, size_t col) override
This method finds the row and column index of an double cell value in a table workspace.
API::LogManager_sptr m_LogManager
shared pointer to the logManager, responsible for the workspace properties.
TableWorkspace * doClone() const override
Virtual clone method. Not implemented to force implementation in children.
size_t rowCount() const override
Number of rows in the workspace.
T * getColDataArray(const std::string &name)
Non-throwing access to the pointer to the column data array for the column with given name.
TableWorkspace & operator=(const TableWorkspace &other)=delete
std::vector< std::shared_ptr< API::Column > >::iterator column_it
Column const iterator.
const std::vector< T > & getColVector(size_t index) const
get constant access to column vector for index i.
void find(size_t value, size_t &row, size_t col) override
This method finds the row and column index of an integer cell value in a table workspace.
std::unique_ptr< TableWorkspace > clone() const
Returns a clone of the workspace.
void findValue(const Type value, size_t &row, size_t colIndex)
template method to find a given value in a table.
std::vector< T > & getColVector(size_t index)
get access to column vector for index i.
std::unique_ptr< TableWorkspace > cloneEmpty() const
Returns a default-initialized clone of the workspace.
TableWorkspace * doCloneEmpty() const override
Virtual cloneEmpty method.
void find(const std::string &value, size_t &row, size_t col) override
This method finds the row and column index of an string cell value in a table workspace.
size_t m_rowCount
row count
API::LogManager_const_sptr getLogs() const override
Get constant access to shared pointer containing workspace porperties.
T * getColDataArray(const std::string &name) const
Non-throwing const access to the pointer to the column data array for the column with given name.
U cell_cast(size_t nRow, size_t nCol) const
Casts cells through converting their values to/from double without type checking; Can produce stuped ...
API::LogManager_sptr logs() override
Get access to shared pointer containing workspace porperties.
void find(API::Boolean value, size_t &row, size_t col) override
This method finds the row and column index of an API::Bollean value in a table workspace.
void find(const Mantid::Kernel::V3D &value, size_t &row, size_t col) override
This method finds the row and column index of an Mantid::Kernel::V3D cell value in a table workspace.
std::vector< std::shared_ptr< API::Column > > m_columns
Shared pointers to the columns.
const std::string id() const override
Return the workspace typeID.
void find(float value, size_t &row, size_t col) override
This method finds the row and column index of an float value in a table workspace.
const std::vector< T > & getColVector(const std::string &name) const
get access to column vector for column with given name
std::vector< T > & getColVector(const std::string &name)
get access to the column vector for column with given name .
The concrete, templated class for properties.
std::shared_ptr< const LogManager > LogManager_const_sptr
shared pointer to the logManager base class (const version)
std::shared_ptr< Column > Column_sptr
std::shared_ptr< LogManager > LogManager_sptr
shared pointer to the logManager base class
std::shared_ptr< const Column > Column_const_sptr
Helper class which provides the Collimation Length for SANS instruments.
As TableColumn stores its data in a std::vector bool type cannot be used in the same way as the other...