Skip to content

Commit 520e2ad

Browse files
authored
Changed externref_table to use geometric resizing, giving amortized O(1) insertions (#2294)
1 parent 0cd5f16 commit 520e2ad

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/externref.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::mem;
55
use std::ptr;
66
use std::slice;
77
use std::vec::Vec;
8+
use std::cmp::max;
89

910
externs! {
1011
#[link(wasm_import_module = "__wbindgen_externref_xform__")]
@@ -32,8 +33,9 @@ impl Slab {
3233
fn alloc(&mut self) -> usize {
3334
let ret = self.head;
3435
if ret == self.data.len() {
35-
if self.data.len() == self.data.capacity() {
36-
let extra = 128;
36+
let curr_len = self.data.len();
37+
if curr_len == self.data.capacity() {
38+
let extra = max(128, curr_len);
3739
let r = unsafe { __wbindgen_externref_table_grow(extra) };
3840
if r == -1 {
3941
internal_error("table grow failure")

0 commit comments

Comments
 (0)