| #pragma once |
| |
| #include <systemd/sd-bus.h> |
| |
| #include <memory> |
| |
| namespace sdbusplus |
| { |
| |
| namespace slot |
| { |
| |
| using slotp_t = sd_bus_slot*; |
| struct slot; |
| |
| namespace details |
| { |
| |
| /** @brief unique_ptr functor to release a slot reference. */ |
| struct SlotDeleter |
| { |
| void operator()(slotp_t ptr) const |
| { |
| sd_bus_slot_unref(ptr); |
| } |
| }; |
| |
| using slot = std::unique_ptr<sd_bus_slot, SlotDeleter>; |
| |
| } // namespace details |
| |
| /** @class slot |
| * @brief Provides C++ holder for sd_bus_slot instances. |
| */ |
| struct slot |
| { |
| /* Define all of the basic class operations: |
| * Not allowed: |
| * - Default constructor to avoid nullptrs. |
| * - Copy operations due to internal unique_ptr. |
| * Allowed: |
| * - Move operations. |
| * - Destructor. |
| */ |
| slot() = delete; |
| slot(const slot&) = delete; |
| slot& operator=(const slot&) = delete; |
| slot(slot&&) = default; |
| slot& operator=(slot&&) = default; |
| ~slot() = default; |
| |
| /** @brief Conversion constructor for 'slotp_t'. |
| * |
| * Takes ownership of the slot-pointer and releases it when done. |
| */ |
| explicit slot(slotp_t s) : _slot(s) |
| {} |
| |
| /** @brief Release ownership of the stored slot-pointer. */ |
| slotp_t release() |
| { |
| return _slot.release(); |
| } |
| |
| /** @brief Check if slot contains a real pointer. (non-nullptr). */ |
| explicit operator bool() const |
| { |
| return bool(_slot); |
| } |
| |
| private: |
| details::slot _slot; |
| }; |
| |
| } // namespace slot |
| } // namespace sdbusplus |