34 #include <unordered_map> 37 #include "DataObject.h" 38 #include "Portability.h" 41 #ifndef DOXYGEN_SHOULD_SKIP_THIS 75 return convertString(data, data + std::strlen(data));
85 return convertString(data.begin(), data.end());
94 template<std::
size_t N>
96 return convertBinary(data, data + N, N);
106 return convertBinary(data.begin(), data.end(), data.size());
115 template<std::
size_t N>
117 return convertBinary(data.begin(), data.end(), data.size());
126 template<
typename T, std::
size_t N>
128 return convertArray(data, data + N, N);
139 return convertArray(data.begin(), data.end(), data.size());
148 template<
typename T, std::
size_t N>
150 return convertArray(data.begin(), data.end(), data.size());
159 template<
typename K,
typename V>
161 return convertMap(data.begin(), data.end(), data.size());
170 template<
typename K,
typename V>
172 return convertMap(data.begin(), data.end(), data.size());
177 template<
typename Iterator>
178 static DataObject convertString(Iterator b, Iterator e) {
179 static_assert(std::is_same<
typename std::iterator_traits<Iterator>::value_type,
char>::value,
"Not a string");
184 std::size_t size = std::distance(b, e);
185 assert(size < UINT32_MAX);
186 object.string.size =
static_cast<uint32_t
>(size);
187 auto buffer =
new char[size + 1];
188 std::copy(b, e, buffer);
190 object.string.data = buffer;
195 template<
typename Iterator>
196 static DataObject convertBinary(Iterator b, Iterator e, std::size_t size) {
197 static_assert(std::is_same<
typename std::iterator_traits<Iterator>::value_type, uint8_t>::value,
"Not binary");
202 assert(size < UINT32_MAX);
203 object.binary.size =
static_cast<uint32_t
>(size);
204 auto buffer =
new uint8_t[size];
205 std::copy(b, e, buffer);
206 object.binary.data = buffer;
211 template<
typename Iterator>
212 static DataObject convertArray(Iterator b, Iterator e, std::size_t size) {
216 using ItemType =
typename std::iterator_traits<Iterator>::value_type;
217 assert(size < UINT32_MAX);
218 object.array.size =
static_cast<uint32_t
>(size);
221 return convert(item);
223 object.array.
data = buffer;
228 template<
typename Iterator>
229 static DataObject convertMap(Iterator b, Iterator e, std::size_t size) {
233 using ItemType =
typename std::iterator_traits<Iterator>::value_type;
234 assert(size < UINT32_MAX);
235 object.map.size = size;
239 kv.
key = convert(item.first);
240 kv.
value = convert(item.second);
243 object.map.
data = buffer;
250 #ifndef DOXYGEN_SHOULD_SKIP_THIS DataObject value
The value of the pair.
Definition: DataObject.h:388
static DataObject convert(T data)
Convert a primitive object to a data object.
Definition: Data.h:64
static DataObject convert(const uint8_t(&data)[N])
Convert a blob to a data object.
Definition: Data.h:95
constexpr Vector2f transform(const Matrix3f &mat, Vector2f point)
Apply an affine transformation to a 2D point.
Definition: Transform.h:331
static DataObject convert(const char *data)
Convert a string to a data object.
Definition: Data.h:74
Conversion functions for data objects.
Definition: Data.h:51
static DataObject convert(const std::array< uint8_t, N > &data)
Convert a blob to a data object.
Definition: Data.h:116
static DataObject convert(const std::vector< uint8_t > &data)
Convert a blob to a data object.
Definition: Data.h:105
A key-value pair of data objects.
Definition: DataObject.h:386
T data[N]
The internal representation of the vector.
Definition: Vector.h:270
The namespace for gf classes.
Definition: Action.h:34
static DataObject convert(const T(&data)[N])
Convert an array to a data object.
Definition: Data.h:127
DataObject key
The key of the pair.
Definition: DataObject.h:387
static DataObject convert(const std::map< K, V > &data)
Convert a map to a data object.
Definition: Data.h:160
static DataObject convert(const std::string &data)
Convert a string to a data object.
Definition: Data.h:84
A data object.
Definition: DataObject.h:200
DataType type
The type of the object.
Definition: DataObject.h:201
static DataObject convert(const std::vector< T > &data)
Convert an array to a data object.
Definition: Data.h:138
static DataObject convert(const std::unordered_map< K, V > &data)
Convert a map to a data object.
Definition: Data.h:171
static DataObject convert(const std::array< T, N > &data)
Convert an array to a data object.
Definition: Data.h:149