From 4ba070766e18e71390fca73cfd6729e03fa311a5 Mon Sep 17 00:00:00 2001 From: Jon Zeppieri Date: Fri, 26 Jul 2019 19:20:52 -0400 Subject: [PATCH] Replace uses of hashtable-cell with hashtable-ref-cell in rumble The hash-demo's "mutable destructive for-each" test, which uses hash-remove! is slightly faster after this change. --- racket/src/cs/rumble/hash.ss | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/racket/src/cs/rumble/hash.ss b/racket/src/cs/rumble/hash.ss index d824972bb0..e104f61105 100644 --- a/racket/src/cs/rumble/hash.ss +++ b/racket/src/cs/rumble/hash.ss @@ -105,17 +105,17 @@ (cond [(mutable-hash? ht) (lock-acquire (mutable-hash-lock ht)) - (cond - [(and (mutable-hash-cells ht) - (hashtable-contains? (mutable-hash-ht ht) k)) - (let ([cell (hashtable-cell (mutable-hash-ht ht) k #f)]) + (let ([cell (and (mutable-hash-cells ht) + (hashtable-ref-cell (mutable-hash-ht ht) k))]) + (cond + [cell (hashtable-delete! (mutable-hash-ht ht) k) ;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)` (set-car! cell #!bwp) (set-cdr! cell #!bwp) - (set-locked-iterable-hash-retry?! ht #t))] - [else - (hashtable-delete! (mutable-hash-ht ht) k)]) + (set-locked-iterable-hash-retry?! ht #t)] + [else + (hashtable-delete! (mutable-hash-ht ht) k)])) (lock-release (mutable-hash-lock ht))] [(weak-equal-hash? ht) (weak-hash-remove! ht k)] [(and (impersonator? ht) @@ -307,9 +307,8 @@ (cond [(mutable-hash? ht) (lock-acquire (mutable-hash-lock ht)) - (let ([v (if (hashtable-contains? (mutable-hash-ht ht) k) - (car (hashtable-cell (mutable-hash-ht ht) k #f)) - none)]) + (let* ([pair (hashtable-ref-cell (mutable-hash-ht ht) k)] + [v (if pair (car pair) none)]) (lock-release (mutable-hash-lock ht)) v)] [(intmap? ht) @@ -927,7 +926,7 @@ (cond [(locked-iterable-hash-cells t) ;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)` - (let ([cell (hashtable-cell ht a #f)]) + (let ([cell (hashtable-ref-cell ht a)]) (hashtable-delete! ht a) (set-car! cell #!bwp) (set-cdr! cell #!bwp))] @@ -977,7 +976,7 @@ (cond [(eq? #!bwp key) (loop (cdr l))] [else - (#%vector-set! vec (unbox pos) (hashtable-cell (weak-equal-hash-vals-ht ht) key #f)) + (#%vector-set! vec (unbox pos) (hashtable-ref-cell (weak-equal-hash-vals-ht ht) key)) (set-box! pos (add1 (unbox pos))) (if (= (unbox pos) len) ;; That's enough keys