7 #if !defined(MQTT_TOPIC_ALIAS_RECV_HPP)
8 #define MQTT_TOPIC_ALIAS_RECV_HPP
11 #include <unordered_map>
14 #include <boost/multi_index_container.hpp>
15 #include <boost/multi_index/ordered_index.hpp>
16 #include <boost/multi_index/member.hpp>
27 namespace mi = boost::multi_index;
37 <<
"topic_alias_recv insert"
39 <<
" alias:" << alias;
40 BOOST_ASSERT(!topic.empty() && alias >= min_ && alias <= max_);
41 auto it = aliases_.lower_bound(alias);
42 if (it == aliases_.end() || it->alias != alias) {
43 aliases_.emplace_hint(it, std::string(topic), alias);
49 e.topic = std::string{topic};
51 [](
auto&) { BOOST_ASSERT(
false); }
58 BOOST_ASSERT(alias >= min_ && alias <= max_);
60 auto it = aliases_.find(alias);
61 if (it != aliases_.end()) topic = it->topic;
65 <<
"find_topic_by_alias"
67 <<
" topic:" << topic;
75 <<
"clear_topic_alias";
92 using mi_topic_alias = mi::multi_index_container<
101 mi_topic_alias aliases_;
Definition: topic_alias_recv.hpp:29
topic_alias_t max() const
Definition: topic_alias_recv.hpp:79
topic_alias_recv(topic_alias_t max)
Definition: topic_alias_recv.hpp:31
std::string find(topic_alias_t alias) const
Definition: topic_alias_recv.hpp:57
void insert_or_update(string_view topic, topic_alias_t alias)
Definition: topic_alias_recv.hpp:34
void clear()
Definition: topic_alias_recv.hpp:72
#define MQTT_LOG(chan, sev)
Definition: log.hpp:135
#define MQTT_ADD_VALUE(name, val)
Definition: log.hpp:136
boost::string_ref string_view
Definition: string_view.hpp:64
constexpr std::remove_reference_t< T > && force_move(T &&t)
Definition: move.hpp:20
std::uint16_t topic_alias_t
Definition: type.hpp:17