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