summaryrefslogtreecommitdiffstats
path: root/srfi/srfi-146-impl.scm
diff options
context:
space:
mode:
authorGravatar John Cowan 2021-11-07 13:26:39 -0500
committerGravatar John Cowan 2021-11-07 13:26:39 -0500
commit4a41fcd464fd24b700196bd00e7633050229d192 (patch)
treeaafee35678d420ded7346f8137ee20808ec5ba37 /srfi/srfi-146-impl.scm
parenteditorial (diff)
parentfix 'remove' test (diff)
Merge remote-tracking branch 'arvyy/master'
Diffstat (limited to '')
-rw-r--r--srfi/srfi-146-impl.scm64
1 files changed, 64 insertions, 0 deletions
diff --git a/srfi/srfi-146-impl.scm b/srfi/srfi-146-impl.scm
new file mode 100644
index 0000000..49b4737
--- /dev/null
+++ b/srfi/srfi-146-impl.scm
@@ -0,0 +1,64 @@
+(define mapping-dtd
+ (let ()
+
+ (define (prep-dtd-arg proc)
+ (lambda (dtd . args)
+ (apply proc args)))
+
+ (define (mapping-alter* dtd dict key failure success)
+ (call/cc
+ ;; escape from whole hashmap-search entirely, when success / failure
+ ;; return something other than through passed in continuation procedures
+ (lambda (k)
+ (define-values
+ (new-dict ignored)
+ (mapping-search dict key
+ (lambda (insert ignore)
+ ;; handle when continuation procedure is called
+ ;; and force it into tail call
+ (call/cc (lambda (k2)
+ (define result
+ (failure (lambda (value) (k2 (insert value #f)))
+ (lambda () (k2 (ignore #f)))))
+ ;; neither insert nor ignore called -- return result to top level escape
+ (k result))))
+ (lambda (key value update remove)
+ (call/cc (lambda (k2)
+ (define result
+ (success
+ key
+ value
+ (lambda (new-key new-value) (k2 (update new-key new-value #f)))
+ (lambda () (k2 (remove #f)))))
+ (k result))))))
+ new-dict)))
+
+ (make-dtd
+ dictionary?-id (prep-dtd-arg mapping?)
+ dict-mutable?-id (lambda _ #f)
+ dict-empty?-id (prep-dtd-arg mapping-empty?)
+ dict-contains?-id (prep-dtd-arg mapping-contains?)
+ dict-ref-id (prep-dtd-arg mapping-ref)
+ dict-ref/default-id (prep-dtd-arg mapping-ref/default)
+ dict-set-id (prep-dtd-arg mapping-set)
+ dict-adjoin-id (prep-dtd-arg mapping-adjoin)
+ dict-delete-id (prep-dtd-arg mapping-delete)
+ dict-delete-all-id (prep-dtd-arg mapping-delete-all)
+ dict-replace-id (prep-dtd-arg mapping-replace)
+ dict-intern-id (prep-dtd-arg mapping-intern)
+ dict-update-id (prep-dtd-arg mapping-update)
+ dict-update/default-id (prep-dtd-arg mapping-update/default)
+ dict-pop-id (prep-dtd-arg mapping-pop)
+ dict-filter-id (prep-dtd-arg mapping-filter)
+ dict-remove-id (prep-dtd-arg mapping-remove)
+ dict-alter-id mapping-alter*
+ dict-size-id (prep-dtd-arg mapping-size)
+ dict-for-each-id (prep-dtd-arg mapping-for-each)
+ dict-count-id (prep-dtd-arg mapping-count)
+ dict-keys-id (prep-dtd-arg mapping-keys)
+ dict-values-id (prep-dtd-arg mapping-values)
+ dict-entries-id (prep-dtd-arg mapping-entries)
+ dict-fold-id (prep-dtd-arg mapping-fold)
+ dict-map->list-id (prep-dtd-arg mapping-map->list)
+ dict->alist-id (prep-dtd-arg mapping->alist)
+ dict-comparator-id (prep-dtd-arg mapping-key-comparator))))
pan> 2001-01-04Fix misplaced device file in Debian installation.Gravatar aeb 3-3/+10 2000-12-12Debian scripts use makedev (>=2.3.1-49) in postinst by default now.Gravatar aeb 7-30/+104 2000-11-25Fix postinst ldconfig.Gravatar aeb 2-11/+11 2000-11-25Add some information about return values.Gravatar aeb 1-3/+29 2000-11-24Bump up version numbers for release.Gravatar aeb 2-3/+11 2000-11-24Added libraw1394.postinst.in to list of distributed files.Gravatar aeb 3-3/+35 2000-11-23Add ldconfig in deb postinst for Debian policy conformance.Gravatar aeb 2-2/+17 2000-11-23Removed acconfig.h, which wasn't needed for some time.Gravatar aeb 1-13/+0 2000-11-22Added ieee1394.h header.Gravatar aeb 3-1/+38 2000-09-13Fix raw1394_start_iso_write() which uses wrong variable.Gravatar aeb 1-1/+1 2000-09-10Work around compiler warnings for int/ptr casts.Gravatar aeb 6-10/+20 2000-09-10Added control files for Debian packages.Gravatar aeb 6-8/+106 2000-09-01Added missing prototypes for iso send functions.Gravatar aeb 1-0/+7 2000-08-08Added raw1394_get_irm_id().Gravatar aeb 7-7/+39 2000-08-06Added support for isochronous sending.Gravatar aeb 3-0/+35 2000-07-05Added raw1394_reset_bus() call.Gravatar aeb 4-0/+23 2000-06-22- Set library version info in configure.in, use in src/Makefile.am.Gravatar aeb 4-2/+16 2000-06-15Update libtool version number.Gravatar aeb 2-2/+2 2000-06-14Added copyright headers.Gravatar aeb 6-0/+54 2000-06-11Added explicit AC_PROG_INSTALL call.Gravatar aeb 1-0/+1 2000-06-09Fix size of error field.Gravatar aeb 1-2/+2 2000-06-02Modified support for 32/64 bit environments, control struct fields have fixed...Gravatar aeb 7-43/+28 2000-05-28Added support for environments with 64 bit kernel and 32 bit userland.Gravatar aeb 8-7/+45 2000-04-27Fixed missing setting of ext code in raw1394_start_lock()Gravatar aeb 1-0/+1 2000-04-15Fixed lock transaction to actually return response value.Gravatar aeb 3-5/+11 2000-04-12Add userdata functions as news.Gravatar aeb 1-0/+4 2000-04-05Add userdata functions.Gravatar aeb 3-0/+18 2000-03-18Bump version number to 0.6.Gravatar aeb 3-5/+6 2000-03-18Mention byte order change.Gravatar aeb 1-0/+2 2000-03-18Mention SourceForge home.Gravatar aeb 1-1/+5