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:
parent
cf0717b855
commit
4ba070766e
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user