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.
This commit is contained in:
Jon Zeppieri 2019-07-26 19:20:52 -04:00 committed by Matthew Flatt
parent cf0717b855
commit 4ba070766e

View File

@ -105,17 +105,17 @@
(cond (cond
[(mutable-hash? ht) [(mutable-hash? ht)
(lock-acquire (mutable-hash-lock ht)) (lock-acquire (mutable-hash-lock ht))
(cond (let ([cell (and (mutable-hash-cells ht)
[(and (mutable-hash-cells ht) (hashtable-ref-cell (mutable-hash-ht ht) k))])
(hashtable-contains? (mutable-hash-ht ht) k)) (cond
(let ([cell (hashtable-cell (mutable-hash-ht ht) k #f)]) [cell
(hashtable-delete! (mutable-hash-ht ht) k) (hashtable-delete! (mutable-hash-ht ht) k)
;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)` ;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)`
(set-car! cell #!bwp) (set-car! cell #!bwp)
(set-cdr! cell #!bwp) (set-cdr! cell #!bwp)
(set-locked-iterable-hash-retry?! ht #t))] (set-locked-iterable-hash-retry?! ht #t)]
[else [else
(hashtable-delete! (mutable-hash-ht ht) k)]) (hashtable-delete! (mutable-hash-ht ht) k)]))
(lock-release (mutable-hash-lock ht))] (lock-release (mutable-hash-lock ht))]
[(weak-equal-hash? ht) (weak-hash-remove! ht k)] [(weak-equal-hash? ht) (weak-hash-remove! ht k)]
[(and (impersonator? ht) [(and (impersonator? ht)
@ -307,9 +307,8 @@
(cond (cond
[(mutable-hash? ht) [(mutable-hash? ht)
(lock-acquire (mutable-hash-lock ht)) (lock-acquire (mutable-hash-lock ht))
(let ([v (if (hashtable-contains? (mutable-hash-ht ht) k) (let* ([pair (hashtable-ref-cell (mutable-hash-ht ht) k)]
(car (hashtable-cell (mutable-hash-ht ht) k #f)) [v (if pair (car pair) none)])
none)])
(lock-release (mutable-hash-lock ht)) (lock-release (mutable-hash-lock ht))
v)] v)]
[(intmap? ht) [(intmap? ht)
@ -927,7 +926,7 @@
(cond (cond
[(locked-iterable-hash-cells t) [(locked-iterable-hash-cells t)
;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)` ;; 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) (hashtable-delete! ht a)
(set-car! cell #!bwp) (set-car! cell #!bwp)
(set-cdr! cell #!bwp))] (set-cdr! cell #!bwp))]
@ -977,7 +976,7 @@
(cond (cond
[(eq? #!bwp key) (loop (cdr l))] [(eq? #!bwp key) (loop (cdr l))]
[else [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))) (set-box! pos (add1 (unbox pos)))
(if (= (unbox pos) len) (if (= (unbox pos) len)
;; That's enough keys ;; That's enough keys