From dd415c957a92814fb0c3db4f40f2f5c60c970a86 Mon Sep 17 00:00:00 2001 From: Pat Garrity Date: Tue, 10 Sep 2024 21:04:50 -0500 Subject: [PATCH] Updated the code documentation. --- .../gs/timing/v0/MonotonicProvider.scala | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/scala/gs/timing/v0/MonotonicProvider.scala b/src/main/scala/gs/timing/v0/MonotonicProvider.scala index 2ab8cfd..d5ea13c 100644 --- a/src/main/scala/gs/timing/v0/MonotonicProvider.scala +++ b/src/main/scala/gs/timing/v0/MonotonicProvider.scala @@ -75,15 +75,42 @@ object MonotonicProvider: final class SystemProvider[F[_]: Sync] extends MonotonicProvider[F]: override def monotonic(): F[Long] = Sync[F].delay(System.nanoTime()) + /** + * Manual implementation of the [[MonotonicProvider]] that allows the caller + * to directly increment/set a tick count, where each tick corresponds to one + * nanosecond of elapsed time. + * + * Use `ManualTickProvider.initialize[F]` to instantiate this class: + * + * {{{ + * val program: IO[ManualTickProvider[IO]] = + * ManualTickProvider.initialize[IO] + * }}} + */ final class ManualTickProvider[F[_]: Sync] private ( ticks: Ref[F, Long] ) extends MonotonicProvider[F]: + /** + * @return The current tick count. + */ override def monotonic(): F[Long] = ticks.get + /** + * Increment the tick count by 1. + */ def tick(): F[Unit] = ticks.update(_ + 1) + /** + * Set the tick count to a specific value. + * + * @param newTickCount The new tick count value. + * @return Side-effect. + */ def set(newTickCount: Long): F[Unit] = ticks.set(newTickCount) + /** + * Reset the tick count to 0. + */ def reset(): F[Unit] = ticks.set(0) object ManualTickProvider: