BeeeOn Gateway  v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
DeviceID.h
1 #pragma once
2 
3 #include <cstdint>
4 #include <string>
5 
6 #include "model/DevicePrefix.h"
7 
8 namespace BeeeOn {
9 
17 class DeviceID {
18 public:
19  static const unsigned int IDENT_WIDTH;
20  static const uint64_t IDENT_MASK;
21  static const uint64_t PREFIX_MASK;
22 
26  DeviceID();
27 
35  DeviceID(uint64_t value);
36 
40  DeviceID(const DevicePrefix &prefix, uint64_t ident);
41 
42  bool isNull() const
43  {
44  return m_value == 0;
45  }
46 
47  operator unsigned long long() const
48  {
49  return (unsigned long long) m_value;
50  }
51 
52  DevicePrefix prefix() const
53  {
54  return DevicePrefix::fromRaw((uint8_t) (m_value >> (is32bit()? 24 : 56)));
55  }
56 
57  uint64_t ident() const
58  {
59  return m_value & (is32bit()?
60  0x0000000000ffffffUL :
61  0x00ffffffffffffffUL);
62  }
63 
64  bool is32bit() const
65  {
66  return (m_value >> 32) == 0;
67  }
68 
69  static DeviceID parse(const std::string &s);
70  std::string toString() const;
71 
72  bool operator !=(const DeviceID &id) const
73  {
74  return m_value != id.m_value;
75  }
76 
77  bool operator ==(const DeviceID &id) const
78  {
79  return m_value == id.m_value;
80  }
81 
82  bool operator <(const DeviceID &id) const
83  {
84  return m_value < id.m_value;
85  }
86 
87  bool operator >(const DeviceID &id) const
88  {
89  return m_value > id.m_value;
90  }
91 
92  bool operator <=(const DeviceID &id) const
93  {
94  return m_value <= id.m_value;
95  }
96 
97  bool operator >=(const DeviceID &id) const
98  {
99  return m_value >= id.m_value;
100  }
101 
106  static DeviceID random(const DevicePrefix &prefix
107  = DevicePrefix::fromRaw(DevicePrefix::PREFIX_INVALID));
108 
109 private:
110  uint64_t m_value;
111 };
112 
113 }
Definition: DeviceID.h:17
static DeviceID random(const DevicePrefix &prefix=DevicePrefix::fromRaw(DevicePrefix::PREFIX_INVALID))
Definition: DeviceID.cpp:68
DeviceID()
Definition: DeviceID.cpp:18