aboutsummaryrefslogtreecommitdiff
path: root/src/rt/rust_builtin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_builtin.cpp')
-rw-r--r--src/rt/rust_builtin.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index 99fa9535..e8d2d67d 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -127,6 +127,31 @@ vec_len(rust_task *task, type_desc *ty, rust_vec *v)
return v->fill / ty->size;
}
+extern "C" CDECL void *
+rand_new(rust_task *task)
+{
+ rust_dom *dom = task->dom;
+ randctx *rctx = (randctx *) task->malloc(sizeof(randctx));
+ if (!rctx) {
+ task->fail(1);
+ return NULL;
+ }
+ isaac_init(dom, rctx);
+ return rctx;
+}
+
+extern "C" CDECL size_t
+rand_next(rust_task *task, randctx *rctx)
+{
+ return rand(rctx);
+}
+
+extern "C" CDECL void
+rand_free(rust_task *task, randctx *rctx)
+{
+ task->free(rctx);
+}
+
//
// Local Variables:
// mode: C++