All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xapi.time.service.TimeService Maven / Gradle / Ivy

package xapi.time.service;

import xapi.time.api.Moment;
import xapi.time.impl.ImmutableMoment;

public interface TimeService extends Moment{

  final Double second_to_nano = 0.000000001;
  final Double milli_to_nano = 0.000001;

  //float now();// from Moment

  /**
   * creates an immutable copy of a moment
   * @param moment - The moment to copy
   * @return an {@link ImmutableMoment} that == moment
   */
  Moment clone(Moment moment);
  /**
   * updates now() to current time
   */
  void tick();
  /**
   * the epoch in millis when this TimeService was instantiated
   * @return - System startup time.
   */
  double birth();

  Moment now();
  /**
   * Returns a new moment guaranteed to be one nano later than any other method.
   * We use a volatile delta float which we check-and-increment for each call
   * to nowPlusOne().
   *
   * This is useful if you want to have usable map keys which point to the same
   * millis timeslow, but have atomic "pseudo nano precision" on systems with
   * low resolution timers.
   *
   * This allows you to use a single ordered queue without resorting to buckets
   * to hold items scheduled at the same time.
   *
   * High resolution time services will use correct nano precision,
   * at the cost of synchronizing on calls to System.nanoTime(),
   * to ensure unique timestamps across all calls to the time service.
   *
   * @return A guaranteed unique timestamp gauranteed later than now()
   * until the next call to tick();
   */
  Moment nowPlusOne();
  /**
   * Attempts to sleep if the current thread is not already interrupted.
   *
   * This method will reset the interrupted flag if the thread is interrupted
   * while sleeping.
   *
   * @param millis - Millis to wait, >= 0
   * @param nanos - Nanos to wait, must be > 0 is millis == 0
   */
//  void trySleep(int millis, int nanos);
  void runLater(Runnable runnable);
  
  /**
   * @return An ISO-8601 compliant timestamp:
   * yyyy-MM-dd'T'HH:mm.sssZ
   */
  String timestamp();


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy