commit d44f867e71e13be3970e8803e0ae238e8d3ed7ee parent 3477569ac4e5ee54003aa0b7a8309ad10b4bb2bb Author: Christian Grothoff <christian@grothoff.org> Date: Fri, 23 Jul 2021 20:07:44 +0200 introduce new TIME helper functions Diffstat:
| M | src/include/gnunet_time_lib.h | | | 42 | ++++++++++++++++++++++++++++++++++++++++-- |
| M | 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 @@ -530,6 +530,44 @@ 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. * * @param a time to convert @@ -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 @@ -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) {