diff options
author | Ori Bernstein <ori@eigenstate.org> | 2015-08-26 12:20:58 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2015-08-26 12:20:58 -0700 |
commit | 2bc852bda98762d3bc01548bf972e3f1b137fbfb (patch) | |
tree | 74831deed3c9057c5fe0cbb8790d220e855bc792 /lib/std/slpush.myr | |
parent | 3de952510eb2a23350d24ed926f19c0cf72a12f2 (diff) | |
download | mc-2bc852bda98762d3bc01548bf972e3f1b137fbfb.tar.gz |
Move Myrddin libs to lib/ subdirectory.
Diffstat (limited to 'lib/std/slpush.myr')
-rw-r--r-- | lib/std/slpush.myr | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/std/slpush.myr b/lib/std/slpush.myr new file mode 100644 index 0000000..b30b1e2 --- /dev/null +++ b/lib/std/slpush.myr @@ -0,0 +1,20 @@ +use "types.use" +use "alloc.use" + +pkg std = + generic slpush : (sl : @a[:], elt : @a -> @a[:]) +;; + +generic slpush = {sl, elt + /* + slpush relies on implementation details + of slgrow for efficiency. Because bucket + sizes come in powers of two for all buckets + <= 32k, and we only reallocate when we hit + a bucket boundary, this is effectively + growing the slice by powers of two. + */ + sl = slgrow(sl, sl.len + 1) + sl[sl.len - 1] = elt + -> sl +} |