Zserio C++17 runtime library 1.3.0
Built for Zserio 2.20.0
Loading...
Searching...
No Matches
GenericAccessor.h
Go to the documentation of this file.
1#ifndef ZSERIO_GENERIC_ACCESSOR_INC_H
2#define ZSERIO_GENERIC_ACCESSOR_INC_H
3
4#include "zserio/Extended.h"
5#include "zserio/Optional.h"
6#include "zserio/Traits.h"
7
8namespace zserio
9{
10
11namespace detail
12{
13
14template <typename T, typename = void>
15struct generic_accessor;
16
17template <typename T>
18struct generic_accessor<T, std::enable_if_t<std::is_enum_v<T>>>
19{
20 using type = T;
21};
22
23template <typename T>
24struct generic_accessor<T, std::enable_if_t<is_bitmask_v<T>>>
25{
26 using type = typename T::Values;
27};
28
29template <typename T, typename U>
30void setGenericOffset(T& offsetField, U bytesOffset)
31{
32 offsetField = static_cast<typename T::ValueType>(bytesOffset);
33}
34
35} // namespace detail
36
37template <typename T>
38using generic_accessor_t = typename detail::generic_accessor<T>::type;
39
40template <typename T>
41const T& genericAccessor(const T& value)
42{
43 return value;
44}
45
46template <typename ALLOC, typename T>
48{
49 return optionalValue.value();
50}
51
52template <typename T>
54{
55 return genericAccessor(extendedValue.value());
56}
57
58template <typename T>
59T& genericAccessor(T& value)
60{
61 return value;
62}
63
64template <typename ALLOC, typename T>
69
70template <typename T>
75
76} // namespace zserio
77
78#endif // ZSERIO_GENERIC_ACCESSOR_INC_H
const T & genericAccessor(const T &value)
typename detail::generic_accessor< T >::type generic_accessor_t