common.hpp
Go to the documentation of this file.
1 #ifndef COMMON_HPP
2 #define COMMON_HPP
3 
4 #include <array>
5 #include <cassert>
6 
7 #ifdef DEBUG
8 #define D(x) x
9 #else
10 #define D(x)
11 #endif
12 
13 #ifdef DEBUG
14 #define PROD_INLINE
15 #else
16 #define PROD_INLINE inline __attribute__((always_inline))
17 #endif
18 
19 using StateID = uint16_t;
20 
26 void hexdump(const void *data, int dataLen);
27 
33 struct uint48 {
34 
35  std::array<uint8_t, 6> arr;
36 
37  void set(uint64_t val) {
38  assert((val >> 48) == 0);
39  arr[0] = static_cast<uint8_t>(val & 0xff);
40  arr[1] = static_cast<uint8_t>((val >> 8) & 0xff);
41  arr[2] = static_cast<uint8_t>((val >> 16) & 0xff);
42  arr[3] = static_cast<uint8_t>((val >> 24) & 0xff);
43  arr[4] = static_cast<uint8_t>((val >> 32) & 0xff);
44  arr[5] = static_cast<uint8_t>((val >> 40) & 0xff);
45  };
46 
47  uint64_t get() {
48  uint64_t val = 0;
49 
50  val |= static_cast<uint64_t>(arr[0]);
51  val = val << 8;
52 
53  val |= static_cast<uint64_t>(arr[1]);
54  val = val << 8;
55 
56  val |= static_cast<uint64_t>(arr[2]);
57  val = val << 8;
58 
59  val |= static_cast<uint64_t>(arr[3]);
60  val = val << 8;
61 
62  val |= static_cast<uint64_t>(arr[4]);
63  val = val << 8;
64 
65  val |= static_cast<uint64_t>(arr[5]);
66 
67  return val;
68  };
69 
70  operator uint64_t() { return get(); };
71 
72  uint64_t operator=(uint64_t val) {
73  set(val);
74  return val;
75  };
76 };
77 
83 struct uint24 {
84 
85  std::array<uint8_t, 3> arr;
86 
87  void set(uint32_t val) {
88  assert((val >> 24) == 0);
89  arr[0] = static_cast<uint8_t>(val & 0xff);
90  arr[1] = static_cast<uint8_t>((val >> 8) & 0xff);
91  arr[2] = static_cast<uint8_t>((val >> 16) & 0xff);
92  };
93 
94  uint32_t get() {
95  uint32_t val = 0;
96 
97  val |= static_cast<uint32_t>(arr[0]);
98  val = val << 8;
99 
100  val |= static_cast<uint32_t>(arr[1]);
101  val = val << 8;
102 
103  val |= static_cast<uint32_t>(arr[2]);
104 
105  return val;
106  };
107 
108  operator uint32_t() { return get(); };
109 
110  uint32_t operator=(uint32_t val) {
111  set(val);
112  return val;
113  };
114 };
115 
116 #endif /* COMMON_HPP */
uint64_t operator=(uint64_t val)
Definition: common.hpp:72
This is a 48 bit variable.
Definition: common.hpp:33
std::array< uint8_t, 3 > arr
Definition: common.hpp:85
void hexdump(const void *data, int dataLen)
Dump hex data.
Definition: hexdump.cpp:12
This is a 24 bit variable.
Definition: common.hpp:83
uint32_t operator=(uint32_t val)
Definition: common.hpp:110
uint16_t StateID
Definition: common.hpp:19
std::array< uint8_t, 6 > arr
Definition: common.hpp:35