diff options
author | Ori Bernstein <ori@eigenstate.org> | 2013-10-18 17:17:52 -0400 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2013-10-18 17:17:52 -0400 |
commit | 6380f0c2b7a4c6e950c5fbced2fd24749850bea5 (patch) | |
tree | 70b4dbdb1e4243a8ce2115dfd70d5c6f681afe03 /libstd/htab.myr | |
parent | fb8e2abee34bebf7f8d1d0b2754894b838414bee (diff) | |
download | mc-6380f0c2b7a4c6e950c5fbced2fd24749850bea5.tar.gz |
Add htkeys() function
Diffstat (limited to 'libstd/htab.myr')
-rw-r--r-- | libstd/htab.myr | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/libstd/htab.myr b/libstd/htab.myr index 6fbd8a1..9c7fe46 100644 --- a/libstd/htab.myr +++ b/libstd/htab.myr @@ -18,6 +18,7 @@ pkg std = generic htfree : (ht : htab(@k, @v)# -> void) generic htput : (ht : htab(@k, @v)#, k : @k, v : @v -> void) generic htget : (ht : htab(@k, @v)#, k : @k -> option(@v)) + generic htkeys : (ht : htab(@k, @v)# -> @k[:]) ;; const Initsz = 32 @@ -138,8 +139,13 @@ generic htput = {ht, k, v generic htdel = {ht, k match idx(ht, k) - `Some i: ht.dead[i] = true;; - _: /* do nothing */;; + `Some i: + ht.dead[i] = true + ht.nelt-- + ;; + _: + /* do nothing */ + ;; ;; } @@ -156,3 +162,18 @@ generic hthas = {ht, k `None: -> false;; ;; } + +generic htkeys = {ht + var keys + var i + var j + + keys = slalloc(ht.nelt) + for i = 0; i < ht.keys.len; i++ + if ht.hashes[i] != 0 && !ht.dead[i] + keys[j++] = ht.keys[i] + ;; + ;; + -> keys +} + |