LCOV - code coverage report
Current view: top level - corosio - wait_traits.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 2 2
Test Date: 2026-09-09 02:31:18 Functions: 100.0 % 3 3

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

Generated by: LCOV version 2.3