vec.scm update

This commit is contained in:
tocariimaa 2025-03-05 13:06:44 -03:00
parent 3a46a24b2f
commit 7f13522351

View file

@ -35,6 +35,9 @@
(define (dynvec-length dvec) (define (dynvec-length dvec)
(car dvec)) (car dvec))
(define (dynvec-cap dvec)
(vector-length (cdr dvec)))
(define (dynvec-ref dvec i) (define (dynvec-ref dvec i)
(vector-ref (cdr dvec) i)) (vector-ref (cdr dvec) i))
@ -44,12 +47,19 @@
(define (dynvec-vec dvec) (define (dynvec-vec dvec)
(cdr 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) (define (dynvec-append! dvec . args)
(let ((i (dynvec-length dvec))) (let ((i (dynvec-length dvec)) (cap (dynvec-cap dvec)))
(for-each (for-each
(lambda (v) (lambda (v)
(vector-set! (dynvec-vec dvec) i 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) args)
(set-car! dvec i))) (set-car! dvec i)))