BeeeOn Gateway  v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
SimpleID.h
1 #pragma once
2 
3 #include <string>
4 #include <climits>
5 #include <Poco/Exception.h>
6 #include <Poco/NumberParser.h>
7 
8 namespace BeeeOn {
9 
10 class SimpleID {
11 public:
12  struct Hash {
13  unsigned int operator() (const SimpleID &id)
14  {
15  return id.hash();
16  }
17  };
18 
19  SimpleID():
20  m_value(0)
21  {
22  }
23 
24  SimpleID(long value):
25  m_value(value)
26  {
27  }
28 
29  SimpleID(const SimpleID &copy):
30  m_value(copy.m_value)
31  {
32  }
33 
34  bool isNull() const
35  {
36  return m_value == 0;
37  }
38 
39  unsigned int hash() const;
40 
41  operator long() const
42  {
43  return m_value;
44  }
45 
46  operator int() const
47  {
48  if (INT_MIN > m_value || m_value > INT_MAX)
49  throw Poco::BadCastException("out of range of int");
50 
51  return (int) m_value;
52  }
53 
54  operator unsigned int() const
55  {
56  if (m_value < 0 || m_value > INT_MAX)
57  throw Poco::BadCastException("out of range of unsigned int");
58 
59  return (unsigned int) m_value;
60  }
61 
62  static SimpleID parse(const std::string &s)
63  {
64  if (s[0] == '0' && s[1] == 'x')
65  return SimpleID(Poco::NumberParser::parseHex(s));
66 
67  return SimpleID(Poco::NumberParser::parse(s));
68  }
69 
70  std::string toString() const
71  {
72  return std::to_string(m_value);
73  }
74 
75  SimpleID &operator ++()
76  {
77  ++m_value;
78  return *this;
79  }
80 
81  SimpleID &operator ++(int)
82  {
83  m_value++;
84  return *this;
85  }
86 
87  bool operator !=(const SimpleID &id) const
88  {
89  return m_value != id.m_value;
90  }
91 
92  bool operator ==(const SimpleID &id) const
93  {
94  return m_value == id.m_value;
95  }
96 
97  bool operator <(const SimpleID &id) const
98  {
99  return m_value < id.m_value;
100  }
101 
102  bool operator >(const SimpleID &id) const
103  {
104  return m_value > id.m_value;
105  }
106 
107  bool operator <=(const SimpleID &id) const
108  {
109  return m_value <= id.m_value;
110  }
111 
112  bool operator >=(const SimpleID &id) const
113  {
114  return m_value >= id.m_value;
115  }
116 
117 private:
118  long m_value = 0;
119 };
120 
121 inline std::ostream & operator <<(std::ostream &s, const SimpleID &id)
122 {
123  return s << id.toString();
124 }
125 
126 }
Definition: SimpleID.h:12
Definition: SimpleID.h:10