From 209ef27a90398cdb9ad5f1a67abee0784973c8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Thu, 18 May 2023 14:03:12 +0200 Subject: [PATCH] Finish BST implementation for mbase usage. --- src/util-dict-bst.scm | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/util-dict-bst.scm b/src/util-dict-bst.scm index 7f74df7..8d86c35 100644 --- a/src/util-dict-bst.scm +++ b/src/util-dict-bst.scm @@ -51,6 +51,10 @@ bdict-values bdict-balance + + bdict-filter-pairs + bdict-filter-keys + bdict-filter-values bdict-tests! ) @@ -270,9 +274,38 @@ (vector->bdict (bdict->vector d))) - ;; Returns a list - (define (bdict-filter d p) - '()) + ;; Returns a list of key-value pairs matching predicate + (define (bdict-filter-pairs d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons (cons k v) a) + a))) + d)) + + ;; Returns a list of keys pairs matching predicate + (define (bdict-filter-keys d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons k a) + a))) + d)) + + ;; Returns a list of keys pairs matching predicate + (define (bdict-filter-values d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons v a) + a))) + d)) ;; Performs module self-tests (define (bdict-tests!)