;;;; llrbtree-test.scm - by Joerg Wittenberger (include "../llrbtree.scm") ;;** Usage Example (define-record-type (make-int-priority-queue-entry color left right index value) int-priority-queue-entry? (color int-priority-queue-color int-priority-queue-color-set!) (left int-priority-queue-left int-priority-queue-left-set!) (right int-priority-queue-right int-priority-queue-right-set!) (index int-priority-queue-index int-priority-queue-index-set!) (value int-priority-queue-value int-priority-queue-value-set!)) (define-inline (make-queue-entry k v) (make-int-priority-queue-entry #f #f #f k v)) (define-llrbtree-code () ((node . args) `(let ((node ,node)) . ,(let loop ((args args)) (if (null? args) '(node) (cons (case (car args) ((color:) `(int-priority-queue-color-set! node ,(cadr args))) ((left:) `(int-priority-queue-left-set! node ,(cadr args))) ((right:) `(int-priority-queue-right-set! node ,(cadr args))) (else (error (format "unbrauchbar ~a" args)))) (loop (cddr args))))))) int-priority-queue-init! ;; defined int-priority-queue-lookup ;; defined #f ;; no min defined int-priority-queue-node-fold ;; defined int-priority-queue-node-for-each ;; defined int-priority-queue-node-insert! ;; defined int-priority-queue-node-delete! ;; delete by node defined int-priority-queue-delete-min! ;; defined int-priority-queue-empty? ;; defined ((k n) `(fx= ,k (int-priority-queue-index ,n))) ((k n) `(fx<= ,k (int-priority-queue-index ,n))) ((n1 n2) `(fx<= (int-priority-queue-index ,n1) (int-priority-queue-index ,n2))) int-priority-queue-left int-priority-queue-left-set! int-priority-queue-right int-priority-queue-right-set! int-priority-queue-color int-priority-queue-color-set! #f) (define tree (int-priority-queue-init! (make-queue-entry #f #f))) (int-priority-queue-node-insert! tree (make-queue-entry 5 "fünf")) (int-priority-queue-node-insert! tree (make-queue-entry 1 "eins")) (int-priority-queue-node-insert! tree (make-queue-entry 8 "acht")) (int-priority-queue-node-insert! tree (make-queue-entry 6 "sechs")) (int-priority-queue-node-insert! tree (make-queue-entry 11 "elf")) (int-priority-queue-node-fold (lambda (n i) (printf "~a: ~a\n" (int-priority-queue-index n) (int-priority-queue-value n)) #f) #f tree) (int-priority-queue-delete-min! tree) (int-priority-queue-node-fold (lambda (n i) (printf "~a: ~a\n" (int-priority-queue-index n) (int-priority-queue-value n)) #f) #f tree)