IOLink 1.16.1
Loading...
Searching...
No Matches
LookUpTable.h
1#pragma once
2
3#include <algorithm>
4
5#include <iolink/DataType.h>
6#include <iolink/DataTypeTraits.h>
7#include <iolink/IOLinkAPI.h>
8
9namespace iolink
10{
11
18class IOLINK_API LookUpTable
19{
20public:
25
32 LookUpTable(DataType dtype, size_t count);
33
41 LookUpTable(DataType dtype, const void* src, size_t count);
42
54 template <typename T>
55 LookUpTable(std::initializer_list<T> init)
56 : LookUpTable(DataTypeTraits<T>::toDataType(), init.size())
57 {
58 T* dst = reinterpret_cast<T*>(buffer());
59 std::copy_n(init.begin(), init.size(), dst);
60 }
61
71 template <typename InputIt>
72 LookUpTable(InputIt first, InputIt last)
73 : LookUpTable(DataTypeTraits<typename InputIt::value_type>::toDataType(), std::distance(first, last))
74 {
75 using ValueType = typename InputIt::value_type;
76 ValueType* dst = reinterpret_cast<ValueType*>(buffer());
77 std::copy_n(first, count(), dst);
78 }
79
81
82 LookUpTable(const LookUpTable& other);
83 LookUpTable& operator=(const LookUpTable& other);
84 LookUpTable(LookUpTable&& other) noexcept;
85 LookUpTable& operator=(LookUpTable&& other) noexcept;
86
90 DataType dtype() const;
91
95 size_t count() const;
96
106 void read(size_t offset, void* dst, size_t count) const;
107
120 template <typename T>
121 inline T at(size_t index) const
122 {
123 T value;
124 read(index, &value, 1);
125 return value;
126 }
127
131 size_t bufferSize() const;
132
136 void* buffer();
137
141 const void* buffer() const;
142
143private:
144 class Private;
145 Private* m_private;
146};
147
148} // end namespace iolink