;; (C) 2008 Jörg F. Wittenberger. ;; Redistribution permitted under either GPL, LGPL or BSD style ;; license. ;;* Left Leaning Red Black Tree ;;** Example 1: Allocation Free Ascending String Map ;; Define constructors and accessors for "string-rbtree" and "string-node". (define-record-type (make-string-node color left right key value) llrbtree-node? (color string-node-color string-node-color-set!) (left string-node-left string-node-left-set!) (right string-node-right string-node-right-set!) (key string-node-key string-node-key-set!) (value string-node-value string-node-value-set!)) (define-llrbtree-code () (args #f) (args #f) ((node . args) `(let ((node ,node)) . ,(let loop ((args args)) (if (null? args) '(node) (cons (case (car args) ((color:) `(string-node-color-set! node ,(cadr args))) ((left:) `(string-node-left-set! node ,(cadr args))) ((right:) `(string-node-right-set! node ,(cadr args))) (else (error (format "unbrauchbar ~a" args)))) (loop (cddr args))))))) string-llrbtree-init! ;; defined string-llrbtree-node-lookup ;; defined string-llrbtree-min ;; defined string-llrbtree-node-fold ;; defined string-llrbtree-node-for-each ;; defined string-llrbtree-node-insert! ;; defined string-llrbtree-delete! ;; defined string-llrbtree-node-delete-min! ;; defined string-llrbtree-empty? ;; defined ((key node) ;; key-before? ordering function `(string=? ,key (string-node-key ,node))) ((key node) ;; key-before? ordering function `(string (make-llrbtee-node color left right key) llrbtree-node? (color color set-color!) (left left set-left!) (right right set-right!) (key key set-key!)) #| (pretty-print (make-llrbtree-code '(pure debug) update update+ update! 'init-int-llrbtree-root-node! 'int-llrbtree-lookup 'int-llrbtree-min 'int-llrbtree-fold 'int-llrbtree-for-each 'int-llrbtree-insert! 'int-llrbtree-delete! 'int-llrbtree-delete-min! 'int-llrbtree-empty? t-k-eq? t-k-