aboutsummaryrefslogtreecommitdiffstats
path: root/mcgoron
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
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 '')
-rw-r--r--mcgoron/weight-balanced-trees/internal.scm12
-rw-r--r--mcgoron/weight-balanced-trees/internal.sld2
-rw-r--r--mcgoron/weight-balanced-trees/srfi/113/sets.scm4
3 files changed, 13 insertions, 5 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)
diff --git a/mcgoron/weight-balanced-trees/internal.sld b/mcgoron/weight-balanced-trees/internal.sld
index f9bf4ac..42ad1fc 100644
--- a/mcgoron/weight-balanced-trees/internal.sld
+++ b/mcgoron/weight-balanced-trees/internal.sld
@@ -31,7 +31,7 @@
with-node
get-data get-left get-right get-size
balanced?
- in-order-vector->node
+ in-order-vector->node in-order-container->node
node->in-order-list
join join2 split
search
diff --git a/mcgoron/weight-balanced-trees/srfi/113/sets.scm b/mcgoron/weight-balanced-trees/srfi/113/sets.scm
index 7c31ece..5b456b1 100644
--- a/mcgoron/weight-balanced-trees/srfi/113/sets.scm
+++ b/mcgoron/weight-balanced-trees/srfi/113/sets.scm
@@ -356,6 +356,10 @@
(define (set->reverse-order-generator set)
(node->reverse-order-generator (get-node set)))
+(define (in-order->set comparator container ref length)
+ (raw-set comparator
+ (in-order-container->node container ref length)))
+
(define compatible-sets?
(apply-nary-predicate
(lambda (cmp s1 s2)