mqtt_cpp
property_variant.hpp
Go to the documentation of this file.
1 // Copyright Takatoshi Kondo 2018
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_PROPERTY_VARIANT_HPP)
8 #define MQTT_PROPERTY_VARIANT_HPP
9 
10 #include <vector>
11 
12 #include <mqtt/namespace.hpp>
13 #include <mqtt/property.hpp>
14 #include <mqtt/variant.hpp>
15 
16 namespace MQTT_NS {
17 
18 namespace v5 {
19 // property_variant
20 
21 using property_variant = variant<
49 >;
50 
51 using properties = std::vector<property_variant>;
52 
53 namespace property {
54 
55 namespace detail {
56 
58  add_const_buffer_sequence_visitor(std::vector<as::const_buffer>& v):v(v) {}
59  template <typename T>
60  void operator()(T&& t) const {
61  t.add_const_buffer_sequence(v);
62  }
63  std::vector<as::const_buffer>& v;
64 };
65 
66 struct id_visitor {
67  template <typename T>
68  id operator()(T const& t) const {
69  return t.id();
70  }
71 };
72 
73 struct size_visitor {
74  template <typename T>
75  std::size_t operator()(T&& t) const {
76  return t.size();
77  }
78 };
79 
81  template <typename T>
82  std::size_t operator()(T&& t) const {
83  return t.num_of_const_buffer_sequence();
84  }
85 };
86 
87 template <typename Iterator>
88 struct fill_visitor {
89  fill_visitor(Iterator b, Iterator e):b(b), e(e) {}
90 
91  template <typename T>
92  void operator()(T&& t) const {
93  t.fill(b, e);
94  }
95 
96  Iterator b;
97  Iterator e;
98 };
99 
100 template <typename Iterator>
101 inline fill_visitor<Iterator> make_fill_visitor(Iterator b, Iterator e) {
102  return fill_visitor<Iterator>(b, e);
103 }
104 
105 } // namespace detail
106 
107 } // namespace property
108 
109 inline void add_const_buffer_sequence(std::vector<as::const_buffer>& v, property_variant const& pv) {
111 }
112 
113 inline property::id id(property_variant const& pv) {
115 }
116 
117 inline std::size_t size(property_variant const& pv) {
119 }
120 
121 inline std::size_t num_of_const_buffer_sequence(property_variant const& pv) {
123 }
124 
125 
126 template <typename Iterator>
127 inline void fill(property_variant const& pv, Iterator b, Iterator e) {
128  auto vis = property::detail::make_fill_visitor(b, e);
129  MQTT_NS::visit(vis, pv);
130 }
131 
132 } // namespace v5
133 
134 } // namespace MQTT_NS
135 
136 #endif // MQTT_PROPERTY_VARIANT_HPP
Definition: property.hpp:373
Definition: property.hpp:301
Definition: property.hpp:313
Definition: property.hpp:641
Definition: property.hpp:495
Definition: property.hpp:439
Definition: property.hpp:445
Definition: property.hpp:307
Definition: property.hpp:517
Definition: property.hpp:351
Definition: property.hpp:433
Definition: property.hpp:462
Definition: property.hpp:479
Definition: property.hpp:534
Definition: property.hpp:395
fill_visitor< Iterator > make_fill_visitor(Iterator b, Iterator e)
Definition: property_variant.hpp:101
id
Definition: property_id.hpp:19
std::size_t size(property_variant const &pv)
Definition: property_variant.hpp:117
std::size_t num_of_const_buffer_sequence(property_variant const &pv)
Definition: property_variant.hpp:121
void fill(property_variant const &pv, Iterator b, Iterator e)
Definition: property_variant.hpp:127
void add_const_buffer_sequence(std::vector< as::const_buffer > &v, property_variant const &pv)
Definition: property_variant.hpp:109
std::vector< property_variant > properties
Definition: property_variant.hpp:51
property::id id(property_variant const &pv)
Definition: property_variant.hpp:113
variant< property::payload_format_indicator, property::message_expiry_interval, property::content_type, property::response_topic, property::correlation_data, property::subscription_identifier, property::session_expiry_interval, property::assigned_client_identifier, property::server_keep_alive, property::authentication_method, property::authentication_data, property::request_problem_information, property::will_delay_interval, property::request_response_information, property::response_information, property::server_reference, property::reason_string, property::receive_maximum, property::topic_alias_maximum, property::topic_alias, property::maximum_qos, property::retain_available, property::user_property, property::maximum_packet_size, property::wildcard_subscription_available, property::subscription_identifier_available, property::shared_subscription_available > property_variant
Definition: property_variant.hpp:49
Definition: any.hpp:27
constexpr decltype(auto) visit(Visitor &&vis, Variants &&... vars)
Definition: variant.hpp:60
std::vector< as::const_buffer > & v
Definition: property_variant.hpp:63
add_const_buffer_sequence_visitor(std::vector< as::const_buffer > &v)
Definition: property_variant.hpp:58
void operator()(T &&t) const
Definition: property_variant.hpp:60
Definition: property_variant.hpp:88
Iterator e
Definition: property_variant.hpp:97
void operator()(T &&t) const
Definition: property_variant.hpp:92
fill_visitor(Iterator b, Iterator e)
Definition: property_variant.hpp:89
Iterator b
Definition: property_variant.hpp:96
Definition: property_variant.hpp:66
id operator()(T const &t) const
Definition: property_variant.hpp:68
std::size_t operator()(T &&t) const
Definition: property_variant.hpp:82
Definition: property_variant.hpp:73
std::size_t operator()(T &&t) const
Definition: property_variant.hpp:75