handler.h raw

   1  // Copyright (c) 2018-2022 The Limenka developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #ifndef LIMENKA_INTERFACES_HANDLER_H
   6  #define LIMENKA_INTERFACES_HANDLER_H
   7  
   8  #include <functional>
   9  #include <memory>
  10  
  11  namespace boost {
  12  namespace signals2 {
  13  class connection;
  14  } // namespace signals2
  15  } // namespace boost
  16  
  17  namespace interfaces {
  18  
  19  //! Generic interface for managing an event handler or callback function
  20  //! registered with another interface. Has a single disconnect method to cancel
  21  //! the registration and prevent any future notifications.
  22  class Handler
  23  {
  24  public:
  25      virtual ~Handler() = default;
  26  
  27      //! Disconnect the handler.
  28      virtual void disconnect() = 0;
  29  };
  30  
  31  //! Return handler wrapping a boost signal connection.
  32  std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection);
  33  
  34  //! Return handler wrapping a cleanup function.
  35  std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup);
  36  
  37  } // namespace interfaces
  38  
  39  #endif // LIMENKA_INTERFACES_HANDLER_H
  40