IOLink 1.11.0
Loading...
Searching...
No Matches
DataFrameView.h
1#pragma once
2
3#include <string>
4
5#include <iolink/DataType.h>
6#include <iolink/FlagSet.h>
7#include <iolink/IOLinkAPI.h>
8#include <iolink/VectorX.h>
9#include <iolink/view/View.h>
10
11namespace iolink
12{
13
20{
21 READ = 0x1,
22 WRITE = 0x2,
23 RESHAPE = 0x4,
24};
25
26extern template class IOLINK_API_IMPORT FlagSet<DataFrameCapability>;
27
32
33// Define bitwise operators for DataFrameCapability
34IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(DataFrameCapability)
35
36
46class IOLINK_API DataFrameView : public View
47{
48public:
55
61 virtual const Vector2u64& shape() const = 0;
62
72 virtual const std::string& columnName(size_t index) const = 0;
73
81 virtual size_t columnIndex(const std::string& name) const = 0;
82
90 virtual DataType columnDataType(size_t index) const = 0;
91
92 // ==== //
93 // READ //
94 // ==== //
95
120 virtual void read(size_t column, size_t offset, size_t count, void* dst) const;
121
134 template <typename T>
135 inline T at(size_t column, size_t row) const
136 {
137 T value;
138 this->read(column, row, 1, &value);
139 return value;
140 }
141
155 template <typename T>
156 inline T at(const std::string& columnName, size_t row) const
157 {
158 return this->at<T>(this->columnIndex(columnName), row);
159 }
160
164 const std::string& unit(size_t columnIndex);
165
166 // ===== //
167 // WRITE //
168 // ===== //
169
194 virtual void write(size_t column, size_t offset, size_t count, const void* src);
195
208 template <typename T>
209 inline void setAt(size_t column, size_t row, T value)
210 {
211 this->write(column, row, 1, &value);
212 }
213
226 template <typename T>
227 inline void setAt(const std::string& columnName, size_t row, T value)
228 {
229 this->setAt<T>(this->columnIndex(columnName), row, value);
230 }
231
235 void setUnit(size_t columnIndex, const std::string& unit);
236
237 // ======= //
238 // RESHAPE //
239 // ======= //
240
255 virtual void addColumn(const std::string& name, DataType dtype);
256
273 virtual void addRows(size_t offset, size_t count);
274
286 virtual void removeColumn(size_t index);
287
300 virtual void removeRows(size_t offset, size_t count);
301
305 std::string toString() const;
306
323 void reshape(const Vector2u64& shape, const std::string* columnNames, const DataType* columnDataTypes);
324};
325
326} // end namespace iolink