Zserio C++17 runtime library  0.5.0
Built for Zserio 2.17.0
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 
9 #include "zserio/DeltaContext.h"
10 #include "zserio/ItemsAccessor.h"
11 #include "zserio/Traits.h"
12 
13 namespace zserio
14 {
15 
16 namespace detail
17 {
18 
19 template <typename T>
20 std::enable_if_t<is_bitmask_v<T>> validate(T value, std::string_view fieldName)
21 {
22  validate(value.getValue(), fieldName);
23 }
24 
25 template <typename T>
26 std::enable_if_t<is_bitmask_v<T>, BitSize> bitSizeOf(T value, BitSize bitPosition = 0)
27 {
28  return bitSizeOf(value.getValue(), bitPosition);
29 }
30 
31 template <typename T>
32 std::enable_if_t<is_bitmask_v<T>> write(BitStreamWriter& writer, T value)
33 {
34  write(writer, value.getValue());
35 }
36 
37 template <typename T>
38 std::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 
45 template <typename T>
46 std::enable_if_t<zserio::is_bitmask_v<T>> initContext(DeltaContext& deltaContext, T value)
47 {
48  deltaContext.init(value.getValue());
49 }
50 
51 template <typename T>
52 std::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 
57 template <typename T>
58 std::enable_if_t<zserio::is_bitmask_v<T>> write(DeltaContext& deltaContext, BitStreamWriter& writer, T value)
59 {
60  deltaContext.write(writer, value.getValue());
61 }
62 
63 template <typename T>
64 std::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 
81 template <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:553