100.00% Lines (2/2) 100.00% Functions (1/1)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2026 Steve Gerbino 2   // Copyright (c) 2026 Steve Gerbino
3   // Copyright (c) 2026 Michael Vandeberg 3   // Copyright (c) 2026 Michael Vandeberg
4   // 4   //
5   // Distributed under the Boost Software License, Version 1.0. (See accompanying 5   // Distributed under the Boost Software License, Version 1.0. (See accompanying
6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7   // 7   //
8   // Official repository: https://github.com/cppalliance/corosio 8   // Official repository: https://github.com/cppalliance/corosio
9   // 9   //
10   10  
11   #ifndef BOOST_COROSIO_WAIT_TRAITS_HPP 11   #ifndef BOOST_COROSIO_WAIT_TRAITS_HPP
12   #define BOOST_COROSIO_WAIT_TRAITS_HPP 12   #define BOOST_COROSIO_WAIT_TRAITS_HPP
13   13  
14   #include <boost/corosio/detail/config.hpp> 14   #include <boost/corosio/detail/config.hpp>
15   15  
16   #include <concepts> 16   #include <concepts>
17   17  
18   namespace boost::corosio { 18   namespace boost::corosio {
19   19  
20   /** Default wait traits for clock-based delays. 20   /** Default wait traits for clock-based delays.
21   21  
22   Controls how much of the remaining time a single underlying 22   Controls how much of the remaining time a single underlying
23   steady-clock wait may cover before `Clock::now()` is re-read. 23   steady-clock wait may cover before `Clock::now()` is re-read.
24   A larger value costs fewer wakeups; a smaller value bounds how 24   A larger value costs fewer wakeups; a smaller value bounds how
25   late an adjustment of `Clock` ( e.g. a stepped time-of-day 25   late an adjustment of `Clock` ( e.g. a stepped time-of-day
26   clock ) is observed. The default covers the full remaining 26   clock ) is observed. The default covers the full remaining
27   duration, which is exact for clocks that advance in lockstep 27   duration, which is exact for clocks that advance in lockstep
28   with the machine's monotonic clock. 28   with the machine's monotonic clock.
29   29  
30   @par Example 30   @par Example
31   @par !example capped_traits 31   @par !example capped_traits
32   32  
33   @tparam Clock The clock type whose durations are converted. 33   @tparam Clock The clock type whose durations are converted.
34   34  
35   @see delay 35   @see delay
36   */ 36   */
37   template<class Clock> 37   template<class Clock>
38   struct wait_traits 38   struct wait_traits
39   { 39   {
40   /** Convert a remaining duration into a wait duration. 40   /** Convert a remaining duration into a wait duration.
41   41  
42   Should return a positive duration when @p d is positive; a 42   Should return a positive duration when @p d is positive; a
43   non-positive result degrades to reactor-rate re-checking. 43   non-positive result degrades to reactor-rate re-checking.
44   44  
45   @par Preconditions 45   @par Preconditions
46   Must not throw and must not block — invoked on the 46   Must not throw and must not block — invoked on the
47   io_context's run thread, including from the timer 47   io_context's run thread, including from the timer
48   completion path. 48   completion path.
49   49  
50   @param d The remaining time until the deadline. 50   @param d The remaining time until the deadline.
51   51  
52   @return The duration the next underlying wait may cover. 52   @return The duration the next underlying wait may cover.
53   */ 53   */
HITGIC 54 - static typename Clock::duration 54 + 5 static typename Clock::duration to_wait_duration(typename Clock::duration d)
DCB 55 - 5 to_wait_duration(typename Clock::duration d)  
56   { 55   {
HITCBC 57   5 return d; 56   5 return d;
58   } 57   }
59   }; 58   };
60   59  
61   /** Concept for wait-traits policies usable with `Clock`. 60   /** Concept for wait-traits policies usable with `Clock`.
62   61  
63   Satisfied when `Traits::to_wait_duration` accepts a 62   Satisfied when `Traits::to_wait_duration` accepts a
64   `Clock::duration` and returns something convertible back to it. 63   `Clock::duration` and returns something convertible back to it.
65   `Traits::to_wait_duration` must not throw. 64   `Traits::to_wait_duration` must not throw.
66   */ 65   */
67   template<class Traits, class Clock> 66   template<class Traits, class Clock>
68 - concept WaitTraits = requires(typename Clock::duration d) 67 + concept WaitTraits = requires(typename Clock::duration d) {
69 - { 68 + {
70 - { Traits::to_wait_duration(d) } 69 + Traits::to_wait_duration(d)
71 - -> std::convertible_to<typename Clock::duration>; 70 + } -> std::convertible_to<typename Clock::duration>;
72   }; 71   };
73   72  
74   } // namespace boost::corosio 73   } // namespace boost::corosio
75   74  
76   #endif 75   #endif