File: itkCSVArray2DDataObject.h

package info (click to toggle)
insighttoolkit5 5.4.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 704,588 kB
  • sloc: cpp: 784,579; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,934; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 461; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (192 lines) | stat: -rw-r--r-- 6,095 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         https://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/

#ifndef itkCSVArray2DDataObject_h
#define itkCSVArray2DDataObject_h

#include "itkObjectFactory.h"
#include "itkDataObject.h"
#include "itkArray2D.h"
#include "itkMacro.h"
#include <vector>

namespace itk
{
/**
 * \class CSVArray2DDataObject
 * \brief Stores parsed data from csv files.
 *
 * CSVArray2DDataObject contains methods for accessing data from the
 * Array2D object. It is used in the CSVFileToArray2DReader class for storing
 * parsed data. The CSVArray2DDataObject comprises of an Array2D object
 * and two std string vectors for storing row and column headers. Individual
 * rows, columns and data fields can be accessed either by the names of the
 * headers or by indices. There are also some mutator methods that can be used
 * to modify values in the Array2D object as well as PushBack functions for
 * pushing column and row headers into their respective vectors.
 *
 * \ingroup ITKIOCSV
 */

template <typename TData>
class ITK_TEMPLATE_EXPORT CSVArray2DDataObject : public DataObject
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(CSVArray2DDataObject);

  /* Standard class type aliases */
  using Self = CSVArray2DDataObject;
  using Superclass = DataObject;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;

  /** Standard New method. */
  itkNewMacro(Self);

  /** \see LightObject::GetNameOfClass() */
  itkOverrideGetNameOfClassMacro(CSVArray2DDataObject);

  /* Vector type alias. */
  using NumericVectorType = typename std::vector<TData>;
  using StringVectorType = typename std::vector<std::string>;

  /** Typedef for the Array2D object. */
  using MatrixType = typename itk::Array2D<TData>;

  /** Set macros */
  itkSetMacro(HasColumnHeaders, bool);
  itkSetMacro(HasRowHeaders, bool);
  itkBooleanMacro(HasColumnHeaders);
  itkBooleanMacro(HasRowHeaders);

  /** Get macros for Column and Row headers. */
  itkGetConstMacro(HasColumnHeaders, bool);
  itkGetConstMacro(HasRowHeaders, bool);

  /** Get macro for the matrix. */
  itkGetMacro(Matrix, MatrixType);

  /** Returns the Column Headers. */
  StringVectorType
  GetColumnHeaders() const;

  /** Returns the Row Headers. */
  StringVectorType
  GetRowHeaders() const;

  /** Returns a Row index by name. */
  unsigned int
  GetRowIndexByName(const std::string &) const;

  /** Returns a Column index by name. */
  unsigned int
  GetColumnIndexByName(const std::string &) const;

  /** Returns a row. Input to the method is a row header string. */
  NumericVectorType
  GetRow(const std::string &) const;

  /** Returns a Row. Input to the method is a row index. */
  NumericVectorType
  GetRow(const unsigned int) const;

  /** Returns a Column. Input to the method is a column header string. */
  NumericVectorType
  GetColumn(const std::string &) const;

  /** Get Column method. Input to the method is a column index. */
  NumericVectorType
  GetColumn(const unsigned int) const;

  /** Method to access a data field from the Array2D object. Inputs are row and
   *  column header strings in that order. */
  TData
  GetData(const std::string &, const std::string &) const;

  /** Method to access a data field from the Array2D object. Inputs are row and
   *  column indices in that order. */
  TData
  GetData(const unsigned int, const unsigned int) const;

  /** Method to access a data field from a particular column. Inputs are the
   *  column header string and the row index. */
  TData
  GetColumnData(const std::string &, const unsigned int) const;

  /** Method to access a data field from a particular row. Inputs are the row
   *  header string and the column index. */
  TData
  GetRowData(const std::string &, const unsigned int) const;

  /** Method to access a data field from the Array2D object using the ()
   *  operator.Inputs are the row and column header strings in that order. */
  TData
  operator()(const std::string &, const std::string &) const;

  /** Method to access a data field from the Array2D object using the ()
   *  operator. Inputs are the row and column indices in that order. */
  TData
  operator()(const unsigned int, const unsigned int) const;

  /** Method to set the size of the Array2D object. */
  void
  SetMatrixSize(unsigned int, unsigned int);

  /** Method to fill the Array2D object with a value. */
  void
  FillMatrix(TData value);

  /** Method to set the Array2D object with data at particular row and column
   *  indices. */
  void
  SetMatrixData(unsigned int, unsigned int, TData);

  /** Method to add a row header to the vector of row headers. */
  void
  RowHeadersPushBack(const std::string &);

  /** Method to add a column header to the vector of column headers. */
  void
  ColumnHeadersPushBack(const std::string &);

  /** Method to erase the first column header if it is the name of the table. */
  void
  EraseFirstColumnHeader();

protected:
  CSVArray2DDataObject() = default;
  ~CSVArray2DDataObject() override = default;
  /** Print method */
  void
  PrintSelf(std::ostream & os, Indent indent) const override;

private:
  MatrixType       m_Matrix{};
  StringVectorType m_ColumnHeaders{};
  StringVectorType m_RowHeaders{};
  bool             m_HasRowHeaders{ false };
  bool             m_HasColumnHeaders{ false };
};

} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#  include "itkCSVArray2DDataObject.hxx"
#endif

#endif