Zserio C++17 runtime library 1.3.0
Built for Zserio 2.20.0
Loading...
Searching...
No Matches
Bitmasks.h
Go to the documentation of this file.
1#ifndef ZSERIO_BITMASKS_H_INC
2#define ZSERIO_BITMASKS_H_INC
3
4#include <string_view>
5#include <type_traits>
6
11#include "zserio/Traits.h"
12
13namespace zserio
14{
15
16namespace detail
17{
18
19template <typename T>
20std::enable_if_t<is_bitmask_v<T>> validate(T value, std::string_view fieldName)
21{
22 validate(value.getValue(), fieldName);
23}
24
25template <typename T>
26std::enable_if_t<is_bitmask_v<T>, BitSize> bitSizeOf(T value, BitSize bitPosition = 0)
27{
28 return bitSizeOf(value.getValue(), bitPosition);
29}
30
31template <typename T>
32std::enable_if_t<is_bitmask_v<T>> write(BitStreamWriter& writer, T value)
33{
34 write(writer, value.getValue());
35}
36
37template <typename T>
38std::enable_if_t<is_bitmask_v<T>> read(BitStreamReader& reader, T& value)
39{
40 typename T::ZserioType rawValue;
41 read(reader, rawValue);
42 value = T(rawValue);
43}
44
45template <typename T>
46std::enable_if_t<zserio::is_bitmask_v<T>> initContext(DeltaContext& deltaContext, T value)
47{
48 deltaContext.init(value.getValue());
49}
50
51template <typename T>
52std::enable_if_t<zserio::is_bitmask_v<T>, BitSize> bitSizeOf(DeltaContext& deltaContext, T value, BitSize = 0)
53{
54 return deltaContext.bitSizeOf(value.getValue());
55}
56
57template <typename T>
58std::enable_if_t<zserio::is_bitmask_v<T>> write(DeltaContext& deltaContext, BitStreamWriter& writer, T value)
59{
60 deltaContext.write(writer, value.getValue());
61}
62
63template <typename T>
64std::enable_if_t<zserio::is_bitmask_v<T>> read(DeltaContext& deltaContext, BitStreamReader& reader, T& value)
65{
66 typename T::ZserioType rawValue;
67 deltaContext.read(reader, rawValue);
68 value = T(rawValue);
69}
70
71} // namespace detail
72
81template <typename T, typename std::enable_if<is_bitmask<T>::value, int>::type = 0>
83{
84 exception << value.getValue(); // note that toString() allocates and exception cannot allocate!
85 return exception;
86}
87
88} // namespace zserio
89
90#endif // ZSERIO_BITMASKS_H_INC
unsigned int BitSize
Definition BitSize.h:8
CppRuntimeException & operator<<(CppRuntimeException &exception, const BasicBitBuffer< ALLOC > &bitBuffer)
Definition BitBuffer.h:554