From e598ffe0a3a3d3db0df1fcc04f52bbefe93d3779 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 26 Mar 2022 07:17:12 +0100 Subject: add GNUNET_TIME_absolute_round_down() function --- src/include/gnunet_time_lib.h | 12 ++++++++++++ src/util/time.c | 14 ++++++++++++++ 2 files changed, 26 insertions(+) (limited to 'src') diff --git a/src/include/gnunet_time_lib.h b/src/include/gnunet_time_lib.h index 55af62b72..d59eb984d 100644 --- a/src/include/gnunet_time_lib.h +++ b/src/include/gnunet_time_lib.h @@ -481,6 +481,18 @@ GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2); +/** + * Round down absolute time @a at to multiple of @a rt. + * + * @param at absolute time to round + * @param rt multiple to round to (non-zero) + * @return rounded time + */ +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at, + struct GNUNET_TIME_Relative rt); + + /** * Return the maximum of two timestamps. * diff --git a/src/util/time.c b/src/util/time.c index aeec2b3f9..cf072aebf 100644 --- a/src/util/time.c +++ b/src/util/time.c @@ -386,6 +386,20 @@ GNUNET_TIME_timestamp_min (struct GNUNET_TIME_Timestamp t1, } +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at, + struct GNUNET_TIME_Relative rt) +{ + struct GNUNET_TIME_Absolute ret; + + GNUNET_assert (! GNUNET_TIME_relative_is_zero (rt)); + ret.abs_value_us + = at.abs_value_us + - at.abs_value_us % rt.rel_value_us; + return ret; +} + + struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future) { -- cgit v1.2.3