Prepare the new ldict implementation.

This commit is contained in:
Dominik Pantůček 2023-07-07 12:07:19 +02:00
parent 1d9edaa320
commit fd927e3569
5 changed files with 38 additions and 9 deletions

View file

@ -584,3 +584,9 @@ Returns true if both BSTs contain the same keys and values.
(import util-bst-bdict)
Reimplementation of old number-only BST dictionary.
## util-bst-ldict [module]
(import util-bst-ldict)
Reimplementation of old list-based symbol dictionary using new BST backend.

View file

@ -56,7 +56,7 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.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 \
util-bst-bdict.o
util-bst-bdict.o util-bst-ldict.o
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
util-time.import.scm util-csv.import.scm util-git.import.scm \
@ -64,14 +64,15 @@ GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
util-parser.import.scm util-list.import.scm \
util-proc.import.scm util-format.import.scm \
util-tag.import.scm util-string.import.scm \
util-bst.import.scm util-bst-bdict.import.scm
util-bst.import.scm util-bst-bdict.import.scm \
util-bst-ldict.import.scm
GENDOC-OBJS=gendoc.o duck-extract.o util-time.o util-csv.o util-io.o \
progress.o testing.o util-proc.o util-git.o util-io.o \
util-stdout.o util-parser.o util-list.o util-proc.o \
util-format.o racket-kwargs.o util-dict-list.o util-tag.o \
util-set-list.o duck.o util-string.o util-bst.o \
util-bst-bdict.o
util-bst-bdict.o util-bst-ldict.o
.PHONY: imports
imports: $(HACKERBASE-DEPS)
@ -526,3 +527,9 @@ UTIL-BST-BDICT-SOURCES=util-bst-bdict.scm util-bst.import.scm \
util-bst-bdict.o: util-bst-bdict.import.scm
util-bst-bdict.import.scm: $(UTIL-BST-BDICT-SOURCES)
UTIL-BST-LDICT-SOURCES=util-bst-ldict.scm duck.import.scm \
util-bst.import.scm util-proc.import.scm
util-bst-ldict.o: util-bst-ldict.import.scm
util-bst-ldict.import.scm: $(UTIL-BST-LDICT-SOURCES)

View file

@ -34,4 +34,5 @@
util-mail
util-bst
util-bst-bdict
util-bst-ldict
)

View file

@ -5,12 +5,13 @@
(module*
util-bst-ldict
#:doc ("xxx")
#:doc ("Reimplementation of old list-based symbol dictionary using new BST backend.")
(
)
(import scheme
util-bst)
util-bst
util-proc)
(define (symbol<? a b)
(string<? (symbol->string a)
@ -31,7 +32,7 @@
(define (ldict-map proc ld)
(let ((i 0)
(both? ((procedure-arity>=? 2) proc))
(index? ((procedure-arity=>? 3) proc)))
(index? ((procedure-arity>=? 3) proc)))
(bst-map-bst ld
(lambda (k v)
(let ((r (if both?
@ -48,4 +49,6 @@
(define (ldict-reduce init proc ld)
(bst-reduce ld proc init))
(define ldict-equal? bst-equal?)
)

View file

@ -429,9 +429,21 @@ arguments.")
("Returns true if both BSTs contain the same keys and values.")
(if (bst-compat? b1 b2)
(let-comparators
(EQ? <? b1)
#t
)
(EQ? _ b1)
(let ((g1 (bst-kv-iterator b1))
(g2 (bst-kv-iterator b2)))
(let loop ()
(let ((kv1 (g1))
(kv2 (g2)))
(if (and (not kv1)
(not kv2))
#t
(if (and (EQ? (car kv1)
(car kv2))
(equality? (cdr kv1)
(cdr kv2)))
(loop)
#f))))))
#f))
;; Module self-tests