From 86b9a40ae7740f6f7e6aea2917138a405deea1d0 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 17 Oct 2023 15:22:06 -0400 Subject: [PATCH] header-only implementation --- include/xo/callback/CallbackSet.hpp | 27 ++++++++++++++++++++------- src/callback/CallbackSet.cpp | 9 --------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/include/xo/callback/CallbackSet.hpp b/include/xo/callback/CallbackSet.hpp index c15aeb34..04c83800 100644 --- a/include/xo/callback/CallbackSet.hpp +++ b/include/xo/callback/CallbackSet.hpp @@ -17,23 +17,36 @@ namespace xo { * * can use id to remove callback later: * cbset.remove_callback(cb_id); + * + * Tag so xo-callback can be header-only */ - class CallbackId { + template + class CallbackIdImpl { public: - CallbackId() = default; - explicit CallbackId(uint32_t id) : id_{id} {} + CallbackIdImpl() = default; + explicit CallbackIdImpl(uint32_t id) : id_{id} {} /* generate a globally-unique id (not threadsafe) */ - static CallbackId generate(); + static CallbackIdImpl generate() { + static CallbackIdImpl s_last_id; + + s_last_id = CallbackIdImpl(s_last_id.id() + 1); + + return s_last_id; + } /*generate*/ uint32_t id() const { return id_; } private: uint32_t id_ = 0; - }; /*CallbackId*/ + }; /*CallbackIdImpl*/ - inline bool operator==(CallbackId lhs, CallbackId rhs) { return lhs.id() == rhs.id(); } - inline bool operator!=(CallbackId lhs, CallbackId rhs) { return lhs.id() != rhs.id(); } + template + inline bool operator==(CallbackIdImpl lhs, CallbackIdImpl rhs) { return lhs.id() == rhs.id(); } + template + inline bool operator!=(CallbackIdImpl lhs, CallbackIdImpl rhs) { return lhs.id() != rhs.id(); } + + using CallbackId = CallbackIdImpl; /* queue add/remove callback instructions encountered during callback * execution, to avoid invalidating vector iterator. diff --git a/src/callback/CallbackSet.cpp b/src/callback/CallbackSet.cpp index 881f57f8..1a889f3a 100644 --- a/src/callback/CallbackSet.cpp +++ b/src/callback/CallbackSet.cpp @@ -7,15 +7,6 @@ namespace xo { namespace fn { - CallbackId - CallbackId::generate() - { - static CallbackId s_last_id; - - s_last_id = CallbackId(s_last_id.id() + 1); - - return s_last_id; - } /*generate*/ } /*namespace fn*/ } /*namespace xo*/