From 364d2594b8c99a1ceb8d91521be7616cddba2aa2 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 25 Jun 2019 18:20:48 -0400 Subject: [PATCH] Fix resize function --- libs/cyclone/shared-queue.sld | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/libs/cyclone/shared-queue.sld b/libs/cyclone/shared-queue.sld index b0101ef5..2ecdefa3 100644 --- a/libs/cyclone/shared-queue.sld +++ b/libs/cyclone/shared-queue.sld @@ -91,16 +91,21 @@ ) (define (%queue-resize! q) - (write "TODO: resize the queue")(newline) -; ;; TODO: assumes we already have the lock -; ;; TODO: error if size is larger than fixnum?? -; (let ((old-store (q:store q)) -; (new-store (make-vector (* (vector-length old-store) 2) #f))) -; (q:set-size! q 0) -; (let loop ((i (vector-length old-store))) -; (when (not (zero? i)) -; (%queue-add! q (vector-ref -; (loop (- i 1))))) + ;; (write "TODO: resize the queue")(newline) + ;; TODO: assumes we already have the lock + ;; TODO: error if size is larger than fixnum?? + (let* ((old-start (q:start q)) + (old-end (q:end q)) + (old-store (q:store q)) + (new-store (make-vector (* (vector-length old-store) 2) #f))) + (q:set-start! q 0) + (q:set-end! q 0) + (q:set-store! q new-store) + (let loop ((i 0) + (start old-start)) + (when (not (= i (vector-length old-store))) + (%queue-add! q (vector-ref old-store start)) + (loop (+ i 1) (inc start (vector-length old-store)))))) ) ;- queue-remove! - remove item (when to block? would be nice if we can block until an item becomes available)