xref: /openbmc/boost-dbus/include/dbus/filter.hpp (revision fc79e461)
1 #ifndef DBUS_FILTER_HPP
2 #define DBUS_FILTER_HPP
3 
4 #include <dbus/detail/queue.hpp>
5 #include <boost/asio.hpp>
6 
7 namespace dbus {
8 
9 class connection;
10 
11 /// Represents a filter of incoming messages.
12 /**
13  * Filters examine incoming messages, demuxing them to multiple queues.
14  */
15 class filter
16 {
17   connection& connection_;
18   function<bool(message)> predicate_;
19   detail::queue<message> queue_;
20 
21   template<typename MessagePredicate>
22   filter(connection& c,
23       BOOST_ASIO_MOVE_ARG(MessagePredicate) p)
24     : connection_(c),
25       predicate_(BOOST_ASIO_MOVE_CAST(MessagePredicate)(p))
26   {
27     // dbus_connection_add_filter
28   }
29 
30   filter() {}
31 
32 public:
33   friend class connection;
34 
35   ~filter()
36   {
37     // dbus_connection_remove_filter
38   }
39 
40   template<typename MessageHandler>
41   inline BOOST_ASIO_INITFN_RESULT_TYPE(MessageHandler,
42       void(boost::system::error_code, message))
43   async_dispatch(
44       BOOST_ASIO_MOVE_ARG(MessageHandler) handler)
45   {
46     return queue_.async_pop(
47       BOOST_ASIO_MOVE_CAST(MessageHandler)(handler));
48   }
49 
50 };
51 
52 } // namespace dbus
53 
54 
55 #endif // DBUS_FILTER_HPP
56