mqtt_cpp
subscribe_options.hpp
Go to the documentation of this file.
1 // Copyright Takatoshi Kondo 2015
2 //
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #if !defined(MQTT_SUBSCRIBE_OPTIONS_HPP)
8 #define MQTT_SUBSCRIBE_OPTIONS_HPP
9 
10 #include <cstdint>
11 #include <ostream>
12 
13 #include <mqtt/namespace.hpp>
14 
15 namespace MQTT_NS {
16 
17 enum class retain_handling : std::uint8_t
18 {
19  send = 0b00000000,
20  send_only_new_subscription = 0b00010000,
21  not_send = 0b00100000,
22 };
23 enum class rap : std::uint8_t
24 {
25  dont = 0b00000000,
26  retain = 0b00001000,
27 };
28 enum class nl : std::uint8_t
29 {
30  no = 0b00000000,
31  yes = 0b00000100,
32 };
33 enum class qos : std::uint8_t
34 {
35  at_most_once = 0b00000000,
36  at_least_once = 0b00000001,
37  exactly_once = 0b00000010,
38 };
39 
40 struct subscribe_options final {
41  constexpr subscribe_options() = delete;
42  ~subscribe_options() = default;
43  constexpr subscribe_options(subscribe_options &&) = default;
44  constexpr subscribe_options(subscribe_options const&) = default;
45  constexpr subscribe_options& operator=(subscribe_options &&) = default;
46  constexpr subscribe_options& operator=(subscribe_options const&) = default;
47 
48  explicit constexpr subscribe_options(std::uint8_t value) : data_(value) { }
49 
50  constexpr subscribe_options(retain_handling value) : data_(static_cast<std::uint8_t>(value)) { }
51  constexpr subscribe_options(rap value) : data_(static_cast<std::uint8_t>(value)) { }
52  constexpr subscribe_options(nl value) : data_(static_cast<std::uint8_t>(value)) { }
53  constexpr subscribe_options(qos value) : data_(static_cast<std::uint8_t>(value)) { }
54 
55  constexpr subscribe_options operator|(subscribe_options rhs) const { return subscribe_options(data_ | rhs.data_); }
56  constexpr subscribe_options operator|(retain_handling rhs) const { return *this | subscribe_options(rhs); }
57  constexpr subscribe_options operator|(rap rhs) const { return *this | subscribe_options(rhs); }
58  constexpr subscribe_options operator|(nl rhs) const { return *this | subscribe_options(rhs); }
59  constexpr subscribe_options operator|(qos rhs) const { return *this | subscribe_options(rhs); }
60 
61  constexpr subscribe_options& operator|=(subscribe_options rhs) { return (*this = (*this | rhs)); }
62  constexpr subscribe_options& operator|=(retain_handling rhs) { return (*this = (*this | rhs)); }
63  constexpr subscribe_options& operator|=(rap rhs) { return (*this = (*this | rhs)); }
64  constexpr subscribe_options& operator|=(nl rhs) { return (*this = (*this | rhs)); }
65  constexpr subscribe_options& operator|=(qos rhs) { return (*this = (*this | rhs)); }
66 
68  { return static_cast<retain_handling>(data_ & 0b00110000); }
69  constexpr rap get_rap() const
70  { return static_cast<rap>(data_ & 0b00001000); }
71  constexpr nl get_nl() const
72  { return static_cast<nl>(data_ & 0b00000100); }
73  constexpr qos get_qos() const
74  { return static_cast<qos>(data_ & 0b00000011); }
75 
76  explicit constexpr operator std::uint8_t() const { return data_; }
77 private:
78  std::uint8_t data_;
79 };
80 
81 constexpr subscribe_options operator|(retain_handling lhs, rap rhs) { return subscribe_options(lhs) | rhs; }
82 constexpr subscribe_options operator|(retain_handling lhs, nl rhs) { return subscribe_options(lhs) | rhs; }
83 constexpr subscribe_options operator|(retain_handling lhs, qos rhs) { return subscribe_options(lhs) | rhs; }
84 
85 constexpr subscribe_options operator|(rap lhs, retain_handling rhs) { return subscribe_options(lhs) | rhs; }
86 constexpr subscribe_options operator|(rap lhs, nl rhs) { return subscribe_options(lhs) | rhs; }
87 constexpr subscribe_options operator|(rap lhs, qos rhs) { return subscribe_options(lhs) | rhs; }
88 
89 constexpr subscribe_options operator|(nl lhs, retain_handling rhs) { return subscribe_options(lhs) | rhs; }
90 constexpr subscribe_options operator|(nl lhs, rap rhs) { return subscribe_options(lhs) | rhs; }
91 constexpr subscribe_options operator|(nl lhs, qos rhs) { return subscribe_options(lhs) | rhs; }
92 
93 constexpr subscribe_options operator|(qos lhs, retain_handling rhs) { return subscribe_options(lhs) | rhs; }
94 constexpr subscribe_options operator|(qos lhs, rap rhs) { return subscribe_options(lhs) | rhs; }
95 constexpr subscribe_options operator|(qos lhs, nl rhs) { return subscribe_options(lhs) | rhs; }
96 
97 constexpr char const* retain_handling_to_str(retain_handling v) {
98  switch(v) {
99  case retain_handling::send: return "send";
100  case retain_handling::send_only_new_subscription: return "send_only_new_subscription";
101  case retain_handling::not_send: return "not_send";
102  default: return "invalid_retain_handling";
103  }
104 }
105 
106 inline
107 std::ostream& operator<<(std::ostream& os, retain_handling val)
108 {
109  os << retain_handling_to_str(val);
110  return os;
111 }
112 
113 constexpr char const* rap_to_str(rap v) {
114  switch(v) {
115  case rap::dont: return "dont";
116  case rap::retain: return "retain";
117  default: return "invalid_rap";
118  }
119 }
120 
121 inline
122 std::ostream& operator<<(std::ostream& os, rap val)
123 {
124  os << rap_to_str(val);
125  return os;
126 }
127 
128 constexpr char const* nl_to_str(nl v) {
129  switch(v) {
130  case nl::no: return "no";
131  case nl::yes: return "yes";
132  default: return "invalid_nl";
133  }
134 }
135 
136 inline
137 std::ostream& operator<<(std::ostream& os, nl val)
138 {
139  os << nl_to_str(val);
140  return os;
141 }
142 
143 constexpr char const* qos_to_str(qos v) {
144  switch(v) {
145  case qos::at_most_once: return "at_most_once";
146  case qos::at_least_once: return "at_least_once";
147  case qos::exactly_once: return "exactly_once";
148  default: return "invalid_qos";
149  }
150 }
151 
152 inline
153 std::ostream& operator<<(std::ostream& os, qos val)
154 {
155  os << qos_to_str(val);
156  return os;
157 }
158 
159 } // namespace MQTT_NS
160 
161 #endif // MQTT_SUBSCRIBE_OPTIONS_HPP
Definition: any.hpp:27
constexpr char const * qos_to_str(qos v)
Definition: subscribe_options.hpp:143
constexpr char const * nl_to_str(nl v)
Definition: subscribe_options.hpp:128
retain_handling
Definition: subscribe_options.hpp:18
retain
Definition: publish.hpp:42
nl
Definition: subscribe_options.hpp:29
constexpr publish_options operator|(retain lhs, dup rhs)
Definition: publish.hpp:93
std::ostream & operator<<(std::ostream &os, connect_return_code val)
Definition: connect_return_code.hpp:43
constexpr char const * retain_handling_to_str(retain_handling v)
Definition: subscribe_options.hpp:97
qos
Definition: subscribe_options.hpp:34
constexpr char const * rap_to_str(rap v)
Definition: subscribe_options.hpp:113
rap
Definition: subscribe_options.hpp:24
Definition: subscribe_options.hpp:40
constexpr subscribe_options(subscribe_options const &)=default
constexpr subscribe_options & operator|=(subscribe_options rhs)
Definition: subscribe_options.hpp:61
constexpr rap get_rap() const
Definition: subscribe_options.hpp:69
constexpr subscribe_options & operator|=(nl rhs)
Definition: subscribe_options.hpp:64
constexpr subscribe_options(qos value)
Definition: subscribe_options.hpp:53
constexpr subscribe_options operator|(rap rhs) const
Definition: subscribe_options.hpp:57
constexpr subscribe_options(retain_handling value)
Definition: subscribe_options.hpp:50
constexpr subscribe_options(subscribe_options &&)=default
constexpr nl get_nl() const
Definition: subscribe_options.hpp:71
constexpr retain_handling get_retain_handling() const
Definition: subscribe_options.hpp:67
constexpr subscribe_options(nl value)
Definition: subscribe_options.hpp:52
constexpr subscribe_options & operator=(subscribe_options const &)=default
constexpr subscribe_options operator|(qos rhs) const
Definition: subscribe_options.hpp:59
constexpr subscribe_options & operator|=(retain_handling rhs)
Definition: subscribe_options.hpp:62
constexpr subscribe_options & operator=(subscribe_options &&)=default
constexpr subscribe_options & operator|=(qos rhs)
Definition: subscribe_options.hpp:65
constexpr qos get_qos() const
Definition: subscribe_options.hpp:73
constexpr subscribe_options(std::uint8_t value)
Definition: subscribe_options.hpp:48
constexpr subscribe_options(rap value)
Definition: subscribe_options.hpp:51
constexpr subscribe_options operator|(retain_handling rhs) const
Definition: subscribe_options.hpp:56
constexpr subscribe_options & operator|=(rap rhs)
Definition: subscribe_options.hpp:63
constexpr subscribe_options operator|(subscribe_options rhs) const
Definition: subscribe_options.hpp:55
constexpr subscribe_options()=delete
constexpr subscribe_options operator|(nl rhs) const
Definition: subscribe_options.hpp:58