Skip to content

Commit d2be5ed

Browse files
committed
Add duration template for all function using std::chrono::milliseconds
1 parent 8bace31 commit d2be5ed

File tree

2 files changed

+44
-24
lines changed

2 files changed

+44
-24
lines changed

zmq.hpp

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -351,16 +351,19 @@ inline int poll(std::vector<zmq_pollitem_t> const &items, long timeout_ = -1)
351351
return detail::poll(const_cast<zmq_pollitem_t *>(items.data()), items.size(), timeout_);
352352
}
353353

354-
inline int
355-
poll(zmq_pollitem_t *items, size_t nitems, std::chrono::milliseconds timeout = std::chrono::milliseconds{-1})
354+
template<typename Duration = std::chrono::milliseconds>
355+
int
356+
poll(zmq_pollitem_t *items, size_t nitems, Duration timeout = std::chrono::milliseconds{-1})
356357
{
357-
return detail::poll(items, nitems, static_cast<long>(timeout.count()));
358+
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
359+
return detail::poll(items, nitems, static_cast<long>(timeout_ms.count()));
358360
}
359361

360-
inline int poll(std::vector<zmq_pollitem_t> &items,
361-
std::chrono::milliseconds timeout = std::chrono::milliseconds{-1})
362+
template<typename Duration = std::chrono::milliseconds>
363+
int poll(std::vector<zmq_pollitem_t> &items, Duration timeout = std::chrono::milliseconds{-1})
362364
{
363-
return detail::poll(items.data(), items.size(), static_cast<long>(timeout.count()));
365+
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
366+
return detail::poll(items.data(), items.size(), static_cast<long>(timeout_ms.count()));
364367
}
365368

366369
ZMQ_DEPRECATED("from 4.3.1, use poll taking std::chrono::duration instead of long")
@@ -369,11 +372,11 @@ inline int poll(std::vector<zmq_pollitem_t> &items, long timeout_)
369372
return detail::poll(items.data(), items.size(), timeout_);
370373
}
371374

372-
template<std::size_t SIZE>
373-
inline int poll(std::array<zmq_pollitem_t, SIZE> &items,
374-
std::chrono::milliseconds timeout = std::chrono::milliseconds{-1})
375+
template<std::size_t SIZE, typename Duration>
376+
int poll(std::array<zmq_pollitem_t, SIZE> &items, Duration timeout = std::chrono::milliseconds{-1})
375377
{
376-
return detail::poll(items.data(), items.size(), static_cast<long>(timeout.count()));
378+
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
379+
return detail::poll(items.data(), items.size(), static_cast<long>(timeout_ms.count()));
377380
}
378381
#endif
379382

@@ -2366,6 +2369,14 @@ class monitor_t
23662369
on_monitor_started();
23672370
}
23682371

2372+
#ifdef ZMQ_CPP11
2373+
template<typename Duration = std::chrono::milliseconds>
2374+
bool check_event(Duration timeout = std::chrono::milliseconds{0})
2375+
{
2376+
return check_event(std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count());
2377+
}
2378+
#endif
2379+
23692380
bool check_event(int timeout = 0)
23702381
{
23712382
assert(_monitor_socket);
@@ -2725,17 +2736,17 @@ template<typename T = no_user_data> class poller_t
27252736
}
27262737
}
27272738

2728-
template <typename Sequence>
2739+
template <typename Sequence, typename Duration = std::chrono::milliseconds>
27292740
size_t wait_all(Sequence &poller_events,
2730-
const std::chrono::milliseconds timeout)
2741+
const Duration timeout)
27312742
{
27322743
static_assert(std::is_same<typename Sequence::value_type, event_type>::value,
27332744
"Sequence::value_type must be of poller_t::event_type");
27342745
int rc = zmq_poller_wait_all(
27352746
poller_ptr.get(),
27362747
reinterpret_cast<zmq_poller_event_t *>(poller_events.data()),
27372748
static_cast<int>(poller_events.size()),
2738-
static_cast<long>(timeout.count()));
2749+
static_cast<long>(std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count()));
27392750
if (rc > 0)
27402751
return static_cast<size_t>(rc);
27412752

@@ -2804,9 +2815,11 @@ class timers
28042815
using fn_t = zmq_timer_fn;
28052816

28062817
#if CPPZMQ_HAS_OPTIONAL
2807-
using timeout_result_t = std::optional<std::chrono::milliseconds>;
2818+
template<typename Duration = std::chrono::milliseconds>
2819+
using timeout_result_t = std::optional<Duration>;
28082820
#else
2809-
using timeout_result_t = detail::trivial_optional<std::chrono::milliseconds>;
2821+
template<typename Duration = std::chrono::milliseconds>
2822+
using timeout_result_t = detail::trivial_optional<Duration>;
28102823
#endif
28112824

28122825
timers() : _timers(zmq_timers_new())
@@ -2824,9 +2837,11 @@ class timers
28242837
ZMQ_ASSERT(rc == 0);
28252838
}
28262839

2827-
id_t add(std::chrono::milliseconds interval, zmq_timer_fn handler, void *arg)
2840+
template<typename Duration = std::chrono::milliseconds>
2841+
id_t add(Duration interval, zmq_timer_fn handler, void *arg)
28282842
{
2829-
id_t timer_id = zmq_timers_add(_timers, interval.count(), handler, arg);
2843+
auto interval_ms = std::chrono::duration_cast<std::chrono::milliseconds>(interval);
2844+
id_t timer_id = zmq_timers_add(_timers, interval_ms.count(), handler, arg);
28302845
if (timer_id == -1)
28312846
throw zmq::error_t();
28322847
return timer_id;
@@ -2839,9 +2854,11 @@ class timers
28392854
throw zmq::error_t();
28402855
}
28412856

2842-
void set_interval(id_t timer_id, std::chrono::milliseconds interval)
2857+
template<typename Duration = std::chrono::milliseconds>
2858+
void set_interval(id_t timer_id, Duration interval)
28432859
{
2844-
int rc = zmq_timers_set_interval(_timers, timer_id, interval.count());
2860+
auto interval_ms = std::chrono::duration_cast<std::chrono::milliseconds>(interval);
2861+
int rc = zmq_timers_set_interval(_timers, timer_id, interval_ms.count());
28452862
if (rc == -1)
28462863
throw zmq::error_t();
28472864
}
@@ -2853,12 +2870,13 @@ class timers
28532870
throw zmq::error_t();
28542871
}
28552872

2856-
timeout_result_t timeout() const
2873+
template<typename Duration = std::chrono::milliseconds>
2874+
timeout_result_t<Duration> timeout() const
28572875
{
28582876
int timeout = zmq_timers_timeout(_timers);
28592877
if (timeout == -1)
2860-
return timeout_result_t{};
2861-
return std::chrono::milliseconds{timeout};
2878+
return timeout_result_t<Duration>{};
2879+
return std::chrono::duration_cast<Duration>(std::chrono::milliseconds{timeout});
28622880
}
28632881

28642882
void execute()

zmq_addon.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,8 @@ class active_poller_t
805805
base_poller.modify(fd, events);
806806
}
807807

808-
size_t wait(std::chrono::milliseconds timeout)
808+
template<typename Duration = std::chrono::milliseconds>
809+
size_t wait(Duration timeout)
809810
{
810811
if (need_rebuild) {
811812
poller_events.resize(handlers.size());
@@ -816,7 +817,8 @@ class active_poller_t
816817
}
817818
need_rebuild = false;
818819
}
819-
const auto count = base_poller.wait_all(poller_events, timeout);
820+
auto timeout_ms = std::chrono::duration_cast<Duration>(timeout);
821+
const auto count = base_poller.wait_all(poller_events, timeout_ms);
820822
std::for_each(poller_events.begin(),
821823
poller_events.begin() + static_cast<ptrdiff_t>(count),
822824
[](decltype(base_poller)::event_type &event) {

0 commit comments

Comments
 (0)