summaryrefslogtreecommitdiffstats
path: root/srfi-126-impl.scm
diff options
context:
space:
mode:
authorGravatar John Cowan 2020-10-31 19:10:31 -0400
committerGravatar GitHub 2020-10-31 19:10:31 -0400
commit814ff1945faffadd8a636e00bffb7cb18056adab (patch)
treea51112a304875d8b49b378daa683a71179c777c0 /srfi-126-impl.scm
parentMerge pull request #3 from arvyy/master (diff)
parentadd depends; custom alist-delete; fix srfi-126 based impl (diff)
Merge pull request #4 from arvyy/master
Fix srfi-126 base dictionary implementation, add tail-sharing alist-delete proc, add "depends on" clauses
Diffstat (limited to 'srfi-126-impl.scm')
-rw-r--r--srfi-126-impl.scm30
1 files changed, 18 insertions, 12 deletions
diff --git a/srfi-126-impl.scm b/srfi-126-impl.scm
index ab27603..6ac67da 100644
--- a/srfi-126-impl.scm
+++ b/srfi-126-impl.scm
@@ -28,15 +28,8 @@
(define val (hashtable-intern! table key default))
(values table val))
- (define (hashtable-update!* table key updater fail success)
- (define d (cons #f #f))
- (define val (hashtable-update! table key proc d))
- (if (eq? d val)
- (fail)
- (success d)))
-
(define (hashtable-update/default!* table key updater default)
- (hashtable-update! table key proc default)
+ (hashtable-update! table key updater default)
table)
(define (hashtable-pop!* table fail)
@@ -92,6 +85,20 @@
(define (hashtable-map->lset* proc table)
(hashtable-map->lset table proc))
+ (define (hashtable-keys* table)
+ (vector->list (hashtable-keys table)))
+
+ (define (hashtable-values* table)
+ (vector->list (hashtable-values table)))
+
+ (define (hashtable-entries* table)
+ (call-with-values
+ (lambda () (hashtable-entries table))
+ (lambda (keys vals)
+ (values
+ (vector->list keys)
+ (vector->list vals)))))
+
(register-dictionary!
'dictionary? hashtable?
'dict-empty? hashtable-empty?
@@ -101,7 +108,6 @@
'dict-set! hashtable-set!*
'dict-delete-all! hashtable-delete-all!*
'dict-intern! hashtable-intern!*
- 'dict-update! hashtable-update!*
'dict-update/default! hashtable-update/default!*
'dict-pop! hashtable-pop!*
'dict-map! hashtable-update-all!*
@@ -110,7 +116,7 @@
'dict-search! hashtable-search*
'dict-size hashtable-size
'dict-for-each hashtable-for-each*
- 'dict-keys hashtable-keys
- 'dict-values hashtable-values
- 'dict-entries hashtable-entry-lists
+ 'dict-keys hashtable-keys*
+ 'dict-values hashtable-values*
+ 'dict-entries hashtable-entries*
'dict-map->list hashtable-map->lset*))