From 5d3e5531412952c556fabb541536bcae34b0ce09 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 29 Apr 2011 11:54:06 -0700 Subject: [PATCH] stdlib: Add a Time module to the standard library --- src/lib/Time.rs | 12 ++++++++++++ src/lib/std.rc | 1 + src/rt/rust_builtin.cpp | 29 +++++++++++++++++++++++++++++ src/rt/rustrt.def.in | 1 + 4 files changed, 43 insertions(+) create mode 100644 src/lib/Time.rs diff --git a/src/lib/Time.rs b/src/lib/Time.rs new file mode 100644 index 00000000000..70a12a6fec4 --- /dev/null +++ b/src/lib/Time.rs @@ -0,0 +1,12 @@ +native "rust" mod rustrt { + fn get_time(&mutable u32 sec, &mutable u32 usec); +} + +type timeval = rec(u32 sec, u32 usec); + +fn get_time() -> timeval { + let timeval res = rec(sec=0u32, usec=0u32); + rustrt.get_time(res.sec, res.usec); + ret res; +} + diff --git a/src/lib/std.rc b/src/lib/std.rc index 4efff14bb8c..44a0689c09f 100644 --- a/src/lib/std.rc +++ b/src/lib/std.rc @@ -76,6 +76,7 @@ mod ExtFmt; mod Box; mod GetOpts; mod Term; +mod Time; // Local Variables: // mode: rust; diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index a232389812a..297b9df7d95 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -1,6 +1,10 @@ #include "rust_internal.h" +#if !defined(__WIN32__) +#include +#endif + /* Native builtins. */ extern "C" CDECL rust_str* @@ -508,6 +512,31 @@ rust_ptr_eq(rust_task *task, type_desc *t, rust_box *a, rust_box *b) { return a == b; } +#if defined(__WIN32__) +extern "C" CDECL void +get_time(rust_task *task, uint32_t *sec, uint32_t *usec) { + SYSTEMTIME systemTime; + FILETIME fileTime; + GetSystemTime(&systemTime); + if (!SystemTimeToFileTime(&systemTime, &fileTime)) { + task->fail(1); + return; + } + + // FIXME: This is probably completely wrong. + *sec = fileTime.dwHighDateTime; + *usec = fileTime.dwLowDateTime; +} +#else +extern "C" CDECL void +get_time(rust_task *task, uint32_t *sec, uint32_t *usec) { + struct timeval tv; + gettimeofday(&tv, NULL); + *sec = tv.tv_sec; + *usec = tv.tv_usec; +} +#endif + // // Local Variables: // mode: C++ diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index d30c146efc7..b2d424632d1 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -8,6 +8,7 @@ debug_tag debug_trap debug_tydesc do_gc +get_time last_os_error rand_free rand_new