diff options
Diffstat (limited to 'src/sdevent/source.hpp')
-rw-r--r-- | src/sdevent/source.hpp | 145 |
1 files changed, 74 insertions, 71 deletions
diff --git a/src/sdevent/source.hpp b/src/sdevent/source.hpp index 812f0a3..4f837be 100644 --- a/src/sdevent/source.hpp +++ b/src/sdevent/source.hpp @@ -37,77 +37,80 @@ using source = std::unique_ptr<sd_event_source, SourceDeleter>; */ class Source { - public: - /* 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. - */ - Source() = delete; - Source(const Source&) = delete; - Source& operator=(const Source&) = delete; - Source(Source&&) = default; - Source& operator=(Source&&) = default; - ~Source() = default; - - /** @brief Conversion constructor from 'SourcePtr'. - * - * Increments ref-count of the source-pointer and releases it - * when done. - */ - explicit Source(SourcePtr s) : src(sd_event_source_ref(s)) {} - - /** @brief Constructor for 'source'. - * - * Takes ownership of the source-pointer and releases it when done. - */ - Source(SourcePtr s, std::false_type) : src(s) {} - - /** @brief Check if source contains a real pointer. (non-nullptr). */ - explicit operator bool() const - { - return bool(src); - } - - /** @brief Test whether or not the source can generate events. */ - auto enabled() - { - int enabled; - sd_event_source_get_enabled(src.get(), &enabled); - return enabled; - } - - /** @brief Allow the source to generate events. */ - void enable(int enable) - { - sd_event_source_set_enabled(src.get(), enable); - } - - /** @brief Set the expiration on a timer source. */ - void setTime( - const std::chrono::steady_clock::time_point& expires) - { - using namespace std::chrono; - auto epoch = expires.time_since_epoch(); - auto time = duration_cast<microseconds>(epoch); - sd_event_source_set_time(src.get(), time.count()); - } - - /** @brief Get the expiration on a timer source. */ - auto getTime() - { - using namespace std::chrono; - uint64_t usec; - sd_event_source_get_time(src.get(), &usec); - microseconds d(usec); - return steady_clock::time_point(d); - } - - private: - details::source src; + public: + /* 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. + */ + Source() = delete; + Source(const Source&) = delete; + Source& operator=(const Source&) = delete; + Source(Source&&) = default; + Source& operator=(Source&&) = default; + ~Source() = default; + + /** @brief Conversion constructor from 'SourcePtr'. + * + * Increments ref-count of the source-pointer and releases it + * when done. + */ + explicit Source(SourcePtr s) : src(sd_event_source_ref(s)) + { + } + + /** @brief Constructor for 'source'. + * + * Takes ownership of the source-pointer and releases it when done. + */ + Source(SourcePtr s, std::false_type) : src(s) + { + } + + /** @brief Check if source contains a real pointer. (non-nullptr). */ + explicit operator bool() const + { + return bool(src); + } + + /** @brief Test whether or not the source can generate events. */ + auto enabled() + { + int enabled; + sd_event_source_get_enabled(src.get(), &enabled); + return enabled; + } + + /** @brief Allow the source to generate events. */ + void enable(int enable) + { + sd_event_source_set_enabled(src.get(), enable); + } + + /** @brief Set the expiration on a timer source. */ + void setTime(const std::chrono::steady_clock::time_point& expires) + { + using namespace std::chrono; + auto epoch = expires.time_since_epoch(); + auto time = duration_cast<microseconds>(epoch); + sd_event_source_set_time(src.get(), time.count()); + } + + /** @brief Get the expiration on a timer source. */ + auto getTime() + { + using namespace std::chrono; + uint64_t usec; + sd_event_source_get_time(src.get(), &usec); + microseconds d(usec); + return steady_clock::time_point(d); + } + + private: + details::source src; }; } // namespace source } // namespace sdevent |