Sen API
Sen Libraries
Toggle main menu visibility
Loading...
Searching...
No Matches
enum_traits.h
Go to the documentation of this file.
1
// === enum_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_ENUM_TRAITS_H
9
#define SEN_CORE_META_ENUM_TRAITS_H
10
11
// sen
12
#include "
sen/core/io/input_stream.h
"
13
#include "
sen/core/io/output_stream.h
"
14
#include "
sen/core/meta/enum_type.h
"
15
#include "
sen/core/meta/var.h
"
16
17
// std
18
#include <cstdint>
19
#include <string>
20
#include <type_traits>
21
22
namespace
sen
23
{
24
25
struct
Var
;
26
29
31
template
<
typename
T>
32
struct
EnumTraitsBase
33
{
34
static
constexpr
bool
available
=
true
;
35
using
StorageType
= std::underlying_type_t<T>;
36
37
static
void
write
(
OutputStream
& out, T val) { impl::writeEnum<T>(out, val); }
38
static
void
read
(
InputStream
& in, T& val) { impl::readEnum<T>(in, val); }
39
static
void
valueToVariant
(
const
T& val,
Var
& var) { var =
static_cast<
StorageType
>
(val); }
40
static
void
variantToValue
(
const
Var
& var, T& val) { impl::enumVariantToValue<T>(var, val); }
41
[[nodiscard]]
static
uint32_t
serializedSize
(T val)
noexcept
{
return
impl::enumSerializedSize<T>(val); }
42
43
static
std::string
toJsonString
(T val)
44
{
45
Var
var;
46
valueToVariant
(val, var);
47
return
toJson
(var);
48
}
49
50
static
void
fromJsonString
(
const
std::string& str, T& val)
51
{
52
const
Var
var =
fromJson
(str);
53
variantToValue
(var, val);
54
}
55
};
56
58
59
}
// namespace sen
60
61
#endif
// SEN_CORE_META_ENUM_TRAITS_H
enum_type.h
sen::InputStream
InputStreamTemplate< LittleEndian > InputStream
Definition
input_stream.h:84
sen::toJson
std::string toJson(const Var &var, int indent=2)
Converts a variant into its Json representation. See https://www.Json.org/Json-en....
sen::fromJson
Var fromJson(const std::string &str)
Inverse as toJson.
input_stream.h
sen
Definition
assert.h:17
sen::OutputStream
OutputStreamTemplate< LittleEndian > OutputStream
Definition
output_stream.h:64
output_stream.h
sen::EnumTraitsBase
Base class for enum traits.
Definition
enum_traits.h:33
sen::EnumTraitsBase::read
static void read(InputStream &in, T &val)
Definition
enum_traits.h:38
sen::EnumTraitsBase::toJsonString
static std::string toJsonString(T val)
Definition
enum_traits.h:43
sen::EnumTraitsBase::write
static void write(OutputStream &out, T val)
Definition
enum_traits.h:37
sen::EnumTraitsBase::variantToValue
static void variantToValue(const Var &var, T &val)
Definition
enum_traits.h:40
sen::EnumTraitsBase::serializedSize
static uint32_t serializedSize(T val) noexcept
Definition
enum_traits.h:41
sen::EnumTraitsBase::available
static constexpr bool available
Definition
enum_traits.h:34
sen::EnumTraitsBase::StorageType
std::underlying_type_t< T > StorageType
Definition
enum_traits.h:35
sen::EnumTraitsBase::valueToVariant
static void valueToVariant(const T &val, Var &var)
Definition
enum_traits.h:39
sen::EnumTraitsBase::fromJsonString
static void fromJsonString(const std::string &str, T &val)
Definition
enum_traits.h:50
sen::Var
Can hold any supported value type. Wraps std::variant to allow recursion and implements some helpers.
Definition
var.h:119
var.h
libs
core
include
sen
core
meta
enum_traits.h
Generated by
1.17.0