From 6aa8f640c8b2c268c27e72ffc5991c864fafed19 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 28 Jan 2020 16:22:33 -0800 Subject: [PATCH] persistent.hashtables: cleanup. --- basis/persistent/hashtables/hashtables.factor | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/basis/persistent/hashtables/hashtables.factor b/basis/persistent/hashtables/hashtables.factor index 64577f8ff01..4d474caa79f 100644 --- a/basis/persistent/hashtables/hashtables.factor +++ b/basis/persistent/hashtables/hashtables.factor @@ -1,19 +1,14 @@ ! Based on Clojure's PersistentHashMap by Rich Hickey. -USING: kernel math accessors assocs fry combinators parser -prettyprint.custom locals make sequences -persistent.assocs -persistent.hashtables.nodes -persistent.hashtables.nodes.empty -persistent.hashtables.nodes.leaf -persistent.hashtables.nodes.full -persistent.hashtables.nodes.bitmap -persistent.hashtables.nodes.collision ; +USING: accessors assocs combinators kernel make math +parser persistent.assocs persistent.hashtables.nodes +prettyprint.custom ; + IN: persistent.hashtables TUPLE: persistent-hash -{ root read-only initial: empty-node } -{ count fixnum read-only } ; + { root read-only initial: empty-node } + { count fixnum read-only } ; M: persistent-hash assoc-size count>> ; @@ -21,13 +16,11 @@ M: persistent-hash at* [ dup hashcode >fixnum ] [ root>> ] bi* (entry-at) dup [ value>> t ] [ f ] if ; -M: persistent-hash new-at ( value key assoc -- assoc' ) +M: persistent-hash new-at [ [ 0 ] 3dip - [ dup hashcode >fixnum ] [ root>> ] bi* - (new-at) 1 0 ? - ] [ count>> ] bi + - persistent-hash boa ; + [ dup hashcode >fixnum ] [ root>> ] bi* (new-at) 1 0 ? + ] [ count>> ] bi + persistent-hash boa ; M: persistent-hash pluck-at [ [ dup hashcode >fixnum ] [ root>> ] bi* (pluck-at) ] keep @@ -39,12 +32,12 @@ M: persistent-hash pluck-at M: persistent-hash >alist [ root>> >alist% ] { } make ; -M: persistent-hash keys >alist [ first ] map ; +M: persistent-hash keys >alist keys ; -M: persistent-hash values >alist [ second ] map ; +M: persistent-hash values >alist values ; -:: >persistent-hash ( assoc -- phash ) - T{ persistent-hash } assoc [| ph k v | v k ph new-at ] assoc-each ; +: >persistent-hash ( assoc -- phash ) + T{ persistent-hash } swap [ swap rot new-at ] assoc-each ; M: persistent-hash equal? over persistent-hash? [ assoc= ] [ 2drop f ] if ;