From 3a3af066af2bf37d99bb05e066f15ac9498e7862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Fri, 7 Jul 2023 10:07:41 +0200 Subject: [PATCH] Add preliminary bdict reimplementation. --- src/Makefile | 7 ++++++- src/util-bst-dict.scm | 42 ++++++++++++++++++++++++++++++++++++++++++ src/util-bst.scm | 4 ++-- 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/util-bst-dict.scm diff --git a/src/Makefile b/src/Makefile index 73cb5d5..ffa409d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,7 +55,7 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \ table-processor.o table-border.o table-style.o sgr-state.o \ util-utf8.o sgr-cell.o template-list-expander.o \ box-drawing.o util-list.o export-web-static.o util-dir.o \ - dokuwiki.o racket-kwargs.o duck.o util-bst.o + dokuwiki.o racket-kwargs.o duck.o util-bst.o util-bst-dict.o GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \ util-time.import.scm util-csv.import.scm util-git.import.scm \ @@ -522,3 +522,8 @@ UTIL-BST-SOURCES=util-bst.scm util-tag.import.scm testing.import.scm util-bst.o: util-bst.import.scm util-bst.import.scm: $(UTIL-BST-SOURCES) + +UTIL-BST-DICT-SOURCES=util-bst-dict.scm util-bst.import.scm + +util-bst-dict.o: util-bst-dict.import.scm +util-bst-dict.import.scm: $(UTIL-BST-DICT-SOURCES) diff --git a/src/util-bst-dict.scm b/src/util-bst-dict.scm new file mode 100644 index 0000000..81afd9c --- /dev/null +++ b/src/util-bst-dict.scm @@ -0,0 +1,42 @@ + +(declare (unit util-bst-dict)) + +(import duck) + +(module* + util-bst-dict + #:doc ("...") + ( + list->bdict + bdict-find-value + bdict-ref + bdict-filter-alues + bdict-keys + bdict-map-list + bdict-map-dict + ) + + (import scheme + util-bst) + + (define (list->bdict lst) + (list->bst lst 'fixnum eq? <)) + + (define (bdict-find-value d p?) + (let ((kv (bst-find-pair d p?))) + (if kv + (cdr kv) + #f))) + + (define bdict-ref bst-ref) + + (define (bdict-filter-values d p?) + (map cdr (bst-filter-pairs d p?))) + + (define bdict-keys bst-keys) + + (define bdict-map-list bst-map-list) + + (define bdict-map-dict bst-map-bst) + + ) diff --git a/src/util-bst.scm b/src/util-bst.scm index ae0b5fb..2e0f450 100644 --- a/src/util-bst.scm +++ b/src/util-bst.scm @@ -30,7 +30,7 @@ bst-filter-pairs bst-map-list - bst-map-dict + bst-map-bst list->bst @@ -327,7 +327,7 @@ (proc (car kv) (cdr kv)))))) (reverse res))) - (define/doc (bst-map-dict bst proc) + (define/doc (bst-map-bst bst proc) ("Returns a new dictionary with all values processed (keys are left intact).") (set-bst-root bst (let loop ((n (bst-root bst)))