aboutsummaryrefslogtreecommitdiffstats
path: root/mcgoron/weight-balanced-trees/internal.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-02-16 20:52:57 -0500
committerGravatar Peter McGoron 2025-02-16 20:52:57 -0500
commitb88f195069438f3f4a18c3295095ccd923390d81 (patch)
treebe12162e85828175d72456fa2407ea674ccbd7cf /mcgoron/weight-balanced-trees/internal.scm
parentuse vectors instead of lists in srfi-113 tests (diff)
CHICKEN bug? Definition of `%insert` in the test for `internal` was
interfering with the import definition for the srfi-113 test.
Diffstat (limited to 'mcgoron/weight-balanced-trees/internal.scm')
-rw-r--r--mcgoron/weight-balanced-trees/internal.scm12
1 files changed, 8 insertions, 4 deletions
diff --git a/mcgoron/weight-balanced-trees/internal.scm b/mcgoron/weight-balanced-trees/internal.scm
index 73bc00c..3a9ae63 100644
--- a/mcgoron/weight-balanced-trees/internal.scm
+++ b/mcgoron/weight-balanced-trees/internal.scm
@@ -112,16 +112,20 @@
;;; Convert in-order vectors to ordered trees.
;;; ;;;;;;;;;;;;;;;;;;;;;;;;;
-(: in-order-vector->node (vector --> node-type))
-(define (in-order-vector->node vec)
+(: in-order-container->node ('a ('a fixnum -> *) fixnum --> node-type))
+(define (in-order-container->node container ref length)
(define (divide left right)
(if (< right left)
'()
(let ((midpoint (floor (/ (+ left right) 2))))
- (wb-tree-node (vector-ref vec midpoint)
+ (wb-tree-node (ref container midpoint)
(divide left (- midpoint 1))
(divide (+ midpoint 1) right)))))
- (divide 0 (- (vector-length vec) 1)))
+ (divide 0 (- length 1)))
+
+(: in-order-vector->node (vector --> node-type))
+(define (in-order-vector->node vec)
+ (in-order-container->node vec vector-ref (vector-length vec)))
(: node->in-order-list (node-type --> list))
(define (node->in-order-list node)