Sen API
Sen Libraries
Loading...
Searching...
No Matches
sequence_traits.h
Go to the documentation of this file.
1// === sequence_traits.h ===============================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_CORE_META_SEQUENCE_TRAITS_H
9#define SEN_CORE_META_SEQUENCE_TRAITS_H
10
11// sen
14#include "sen/core/io/util.h"
16#include "sen/core/meta/var.h"
17
18// std
19#include <cstdint>
20#include <string>
21
22namespace sen
23{
24
25struct Var;
26
29
31template <typename T>
33{
34 static constexpr bool available = true;
35
36 static void write(OutputStream& out, const T& val) { impl::writeSequence<T>(out, val); }
37 static void read(InputStream& in, T& val) { impl::readSequence<T>(in, val); }
38 static void valueToVariant(const T& val, Var& var) { impl::sequenceToVariant<T>(val, var); }
39 static void variantToValue(const Var& var, T& val) { impl::variantToSequence<T>(var, val); }
40 [[nodiscard]] static uint32_t serializedSize(const T& val) noexcept { return impl::sequenceSerializedSize<T>(val); }
41
42 static std::string toJsonString(const T& val)
43 {
44 Var var;
45 valueToVariant(val, var);
46 return toJson(var);
47 }
48
49 static void fromJsonString(const std::string& str, T& val)
50 {
51 const Var var = fromJson(str);
52 variantToValue(var, val);
53 }
54};
55
57template <typename T>
59{
60 static constexpr bool available = true;
61
62 static void write(OutputStream& out, const T& val) { impl::writeArray(out, val); }
63 static void read(InputStream& in, T& val) { impl::readArray<T>(in, val); }
64 static void valueToVariant(const T& val, Var& var) { impl::arrayToVariant<T>(val, var); }
65 static void variantToValue(const Var& var, T& val) { impl::variantToArray<T>(var, val); }
66 [[nodiscard]] static uint32_t serializedSize(const T& val) noexcept { return impl::arraySerializedSize<T>(val); }
67
68 static std::string toJsonString(const T& val)
69 {
70 Var var;
71 valueToVariant(val, var);
72 return toJson(var);
73 }
74
75 static void fromJsonString(const std::string& str, T& val)
76 {
77 const Var var = fromJson(str);
78 variantToValue(var, val);
79 }
80};
81
83
84} // namespace sen
85
86#endif // SEN_CORE_META_SEQUENCE_TRAITS_H
InputStreamTemplate< LittleEndian > InputStream
Definition input_stream.h:84
std::string toJson(const Var &var, int indent=2)
Converts a variant into its Json representation. See https://www.Json.org/Json-en....
Var fromJson(const std::string &str)
Inverse as toJson.
Definition assert.h:17
OutputStreamTemplate< LittleEndian > OutputStream
Definition output_stream.h:64
Base class for sequence traits.
Definition sequence_traits.h:59
static void variantToValue(const Var &var, T &val)
Definition sequence_traits.h:65
static uint32_t serializedSize(const T &val) noexcept
Definition sequence_traits.h:66
static void write(OutputStream &out, const T &val)
Definition sequence_traits.h:62
static void valueToVariant(const T &val, Var &var)
Definition sequence_traits.h:64
static void read(InputStream &in, T &val)
Definition sequence_traits.h:63
static std::string toJsonString(const T &val)
Definition sequence_traits.h:68
static constexpr bool available
Definition sequence_traits.h:60
static void fromJsonString(const std::string &str, T &val)
Definition sequence_traits.h:75
Base class for sequence traits.
Definition sequence_traits.h:33
static void valueToVariant(const T &val, Var &var)
Definition sequence_traits.h:38
static std::string toJsonString(const T &val)
Definition sequence_traits.h:42
static constexpr bool available
Definition sequence_traits.h:34
static void variantToValue(const Var &var, T &val)
Definition sequence_traits.h:39
static void fromJsonString(const std::string &str, T &val)
Definition sequence_traits.h:49
static void read(InputStream &in, T &val)
Definition sequence_traits.h:37
static uint32_t serializedSize(const T &val) noexcept
Definition sequence_traits.h:40
static void write(OutputStream &out, const T &val)
Definition sequence_traits.h:36
Can hold any supported value type. Wraps std::variant to allow recursion and implements some helpers.
Definition var.h:119