From 7f13522351cda884e0a714b7747f7cf060eded6e Mon Sep 17 00:00:00 2001 From: tocariimaa Date: Wed, 5 Mar 2025 13:06:44 -0300 Subject: [PATCH] vec.scm update --- misc/data_structures/vec.scm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/misc/data_structures/vec.scm b/misc/data_structures/vec.scm index a6af491..d0cf2b3 100644 --- a/misc/data_structures/vec.scm +++ b/misc/data_structures/vec.scm @@ -35,6 +35,9 @@ (define (dynvec-length dvec) (car dvec)) +(define (dynvec-cap dvec) + (vector-length (cdr dvec))) + (define (dynvec-ref dvec i) (vector-ref (cdr dvec) i)) @@ -44,12 +47,19 @@ (define (dynvec-vec dvec) (cdr dvec)) +(define (dynvec-resize! dvec newcap) + (let ((nvec (make-vector newcap))) + (do ((i 0 (+ i 1))) ((= i 0))))) + +;;; Appends elements to a dynamic vector, resizing if needed. (define (dynvec-append! dvec . args) - (let ((i (dynvec-length dvec))) + (let ((i (dynvec-length dvec)) (cap (dynvec-cap dvec))) (for-each (lambda (v) (vector-set! (dynvec-vec dvec) i v) - (set! i (+ i 1))) + (set! i (+ i 1)) + (if (= i cap) + (dynvec-resize! dvec (* dvec 2)))) args) (set-car! dvec i)))