about summary refs log tree commit diff
path: root/src/rt
diff options
context:
space:
mode:
authorKevin Cantu <me@kevincantu.org>2012-02-04 03:16:59 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-05 14:56:16 -0800
commitd3dfe8758d674d41c3aae116385bcc2b992413ed (patch)
treeb173b538336c1b5509b6dcc90803b2daf8a7eb13 /src/rt
parent9f0239ce9c24972e8f50b4161130414965886348 (diff)
downloadrust-d3dfe8758d674d41c3aae116385bcc2b992413ed.tar.gz
rust-d3dfe8758d674d41c3aae116385bcc2b992413ed.zip
Making vec::reserve reserve precisely the size given (untested)
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust_builtin.cpp2
-rw-r--r--src/rt/rust_util.h12
2 files changed, 8 insertions, 6 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index c5725f0e392..69bc88157f0 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -102,7 +102,7 @@ extern "C" CDECL void
 vec_reserve_shared(type_desc* ty, rust_vec** vp,
                    size_t n_elts) {
     rust_task *task = rust_task_thread::get_task();
-    reserve_vec(task, vp, n_elts * ty->size);
+    reserve_vec_exact(task, vp, n_elts * ty->size);
 }
 
 /**
diff --git a/src/rt/rust_util.h b/src/rt/rust_util.h
index 23c67422c39..07569db3ffa 100644
--- a/src/rt/rust_util.h
+++ b/src/rt/rust_util.h
@@ -178,15 +178,17 @@ inline size_t vec_size(size_t elems) {
     return sizeof(rust_vec) + sizeof(T) * elems;
 }
 
-inline void reserve_vec(rust_task* task, rust_vec** vpp, size_t size) {
+inline void reserve_vec_exact(rust_task* task, rust_vec** vpp, size_t size) {
     if (size > (*vpp)->alloc) {
-        size_t new_alloc = next_power_of_two(size);
-        *vpp = (rust_vec*)task->kernel->realloc(*vpp, new_alloc +
-                                                sizeof(rust_vec));
-        (*vpp)->alloc = new_alloc;
+        *vpp = (rust_vec*)task->kernel->realloc(*vpp, size + sizeof(rust_vec));
+        (*vpp)->alloc = size;
     }
 }
 
+inline void reserve_vec(rust_task* task, rust_vec** vpp, size_t size) {
+    reserve_vec_exact(task, vpp, next_power_of_two(size));
+}
+
 typedef rust_vec rust_str;
 
 inline rust_str *