ExpandCollapse

+ 1 RTC: Time of Day

A Real Time Clock (RTC) is a device that provides the current date and time of day.

share/lib/std/time.flx

  class Time_class [os] {
    virtual gen time: 1 -> double; // time in seconds since Jan 1 1970 UTC, seconds
  }
  
  open class Time {
  if PLAT_WIN32 do
    inherit Win32Time;
  else
    inherit PosixTime;
  done
    rename fun sleep =  Faio::sleep; 
  
  }
  
  

+ 2 Posix RTC

share/lib/std/posix/time.flx

  
  class PosixTime
  {
    requires Posix_headers::sys_time_h;
  
    private type time_t = "time_t";
    private type suseconds_t = "suseconds_t";
  
    private fun _ctor_double: time_t -> double = "static_cast<double>($1)";
    private fun _ctor_double: suseconds_t -> double = "static_cast<double>($1)";
  
    private cstruct timeval {
      tv_sec: time_t;
      tv_usec: suseconds_t;
    };
  
    private proc gettimeofday: &timeval = "gettimeofday($1, NULL);";
  
    inherit Time_class[Posix];
  
    instance Time_class[Posix] {
      gen time () : double = {
        var tv:timeval;
        gettimeofday(&tv);
        return tv.tv_sec.double + tv.tv_usec.double / 1.0e6;
      }
    }
  
    type system_timepoint  = "::std::chrono::time_point<::std::chrono::system_clock>"
      requires Cxx11_headers::chrono, Cxx11_headers::ratio
    ;
  
    type system_duration = "::std::chrono::system_clock::duration"
      requires Cxx11_headers::chrono, Cxx11_headers::ratio
    ;
  
    gen system_clock_now : 1 -> system_timepoint = "::std::chrono::system_clock::now()";
  
    // elapsed time
    fun -: system_timepoint * system_timepoint -> system_duration = "$1-$2";
    
    ctor double : system_duration = """
      ((::std::chrono::duration<double>($1)).count())
    """;
  
  }
  

+ 3 Win32 RTC

share/lib/std/win32/time.flx

  
  class Win32Time
  {
    requires Posix_headers::sys_types_h;
    requires Win32_headers::sys_timeb_h;
  
    private type time_t = "time_t";
    private fun _ctor_double: time_t -> double = "static_cast<double>($1)";
  
    private cstruct __timeb64 {
      time: time_t; // seconds
      millitm: ushort; // milliseconds
    };
  
    private proc _ftime64_s: &__timeb64 = "_ftime64_s($1);";
  
    inherit Time_class[Win32];
  
    instance Time_class[Win32] {
      gen time () : double = {
        var tv:__timeb64;
        _ftime64_s(&tv);
        return tv.time.double + tv.millitm.double / 1.0e3;
      }
    }
  }