From d44f867e71e13be3970e8803e0ae238e8d3ed7ee Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 23 Jul 2021 20:07:44 +0200 Subject: introduce new TIME helper functions --- src/include/gnunet_time_lib.h | 42 ++++++++++++++++++++++++++++++++++++++++-- src/util/time.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/include/gnunet_time_lib.h b/src/include/gnunet_time_lib.h index b9e87fcbe..bddf5c6bf 100644 --- a/src/include/gnunet_time_lib.h +++ b/src/include/gnunet_time_lib.h @@ -529,6 +529,44 @@ struct GNUNET_TIME_AbsoluteNBO GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a); +/** + * Convert milliseconds after the UNIX epoch to absolute time. + * + * @param ms_after_epoch millisecond timestamp to convert + * @return converted time value + */ +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_from_ms (uint64_t ms_after_epoch); + + +/** + * Test if @a abs is never. + * + * @return true if it is. + */ +bool +GNUNET_TIME_absolute_is_never (struct GNUNET_TIME_Absolute abs); + + +/** + * Test if @a rel is forever. + * + * @return true if it is. + */ +bool +GNUNET_TIME_relative_is_forever (struct GNUNET_TIME_Relative rel); + + +/** + * Convert seconds after the UNIX epoch to absolute time. + * + * @param s_after_epoch seconds after epoch to convert + * @return converted time value + */ +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_from_s (uint64_t s_after_epoch); + + /** * Convert absolute time from network byte order. * @@ -609,8 +647,8 @@ struct GNUNET_CONFIGURATION_Handle; * @return monotonically increasing time */ struct GNUNET_TIME_Absolute -GNUNET_TIME_absolute_get_monotonic (const struct - GNUNET_CONFIGURATION_Handle *cfg); +GNUNET_TIME_absolute_get_monotonic ( + const struct GNUNET_CONFIGURATION_Handle *cfg); #if 0 /* keep Emacsens' auto-indent happy */ diff --git a/src/util/time.c b/src/util/time.c index 456ee660b..15a4160e2 100644 --- a/src/util/time.c +++ b/src/util/time.c @@ -470,6 +470,47 @@ GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a) } +bool +GNUNET_TIME_absolute_is_never (struct GNUNET_TIME_Absolute abs) +{ + return abs.abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us; +} + + +bool +GNUNET_TIME_relative_is_forever (struct GNUNET_TIME_Relative rel) +{ + return rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us; +} + + +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_from_ms (uint64_t ms_after_epoch) +{ + struct GNUNET_TIME_Absolute ret; + + ret.abs_value_us = GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us + * ms_after_epoch; + if (ret.abs_value_us / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us != + ms_after_epoch) + ret = GNUNET_TIME_UNIT_FOREVER_ABS; + return ret; +} + + +struct GNUNET_TIME_Absolute +GNUNET_TIME_absolute_from_s (uint64_t s_after_epoch) +{ + struct GNUNET_TIME_Absolute ret; + + ret.abs_value_us = GNUNET_TIME_UNIT_SECONDS.rel_value_us * s_after_epoch; + if (ret.abs_value_us / GNUNET_TIME_UNIT_SECONDS.rel_value_us != + s_after_epoch) + ret = GNUNET_TIME_UNIT_FOREVER_ABS; + return ret; +} + + struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a) { -- cgit v1.2.3