Sen API
Sen Libraries
Loading...
Searching...
No Matches
quantity_traits.h
Go to the documentation of this file.
1// === quantity_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_QUANTITY_TRAITS_H
9#define SEN_CORE_META_QUANTITY_TRAITS_H
10
11// sen
14#include "sen/core/io/util.h"
17#include "sen/core/meta/var.h"
18
19// std
20#include <cstdint>
21#include <string>
22
23namespace sen
24{
25
26struct Var;
27
30
32template <typename T>
34{
35 using ValueType = typename T::ValueType;
36
37 static constexpr bool available = true;
38
39 static void write(OutputStream& out, T val) { impl::writeQuantity<T>(out, val); }
40 static void read(InputStream& in, T& val) { impl::readQuantity<T>(in, val); }
41 static void valueToVariant(T val, Var& var) { impl::quantityToVariant<T>(val, var); }
42 static void variantToValue(const Var& var, T& val) { impl::variantToQuantity<T>(var, val); }
43 [[nodiscard]] static uint32_t serializedSize(const T& val) noexcept
44 {
46 }
47
48 static std::string toJsonString(T val)
49 {
50 Var var;
51 valueToVariant(val, var);
52 return toJson(var);
53 }
54
55 static void fromJsonString(const std::string& str, T& val)
56 {
57 const Var var = fromJson(str);
58 variantToValue(var, val);
59 }
60};
61
63
64} // namespace sen
65
66#endif // SEN_CORE_META_QUANTITY_TRAITS_H
InputStreamTemplate< LittleEndian > InputStream
Definition input_stream.h:84
Definition type_traits.h:47
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 quantity traits.
Definition quantity_traits.h:34
static constexpr bool available
Definition quantity_traits.h:37
typename T::ValueType ValueType
Definition quantity_traits.h:35
static std::string toJsonString(T val)
Definition quantity_traits.h:48
static void read(InputStream &in, T &val)
Definition quantity_traits.h:40
static void valueToVariant(T val, Var &var)
Definition quantity_traits.h:41
static uint32_t serializedSize(const T &val) noexcept
Definition quantity_traits.h:43
static void fromJsonString(const std::string &str, T &val)
Definition quantity_traits.h:55
static void write(OutputStream &out, T val)
Definition quantity_traits.h:39
static void variantToValue(const Var &var, T &val)
Definition quantity_traits.h:42
Can hold any supported value type. Wraps std::variant to allow recursion and implements some helpers.
Definition var.h:119