[rucksack-cvs] CVS rucksack
alemmens
alemmens at common-lisp.net
Thu May 18 22:09:40 UTC 2006
Update of /project/rucksack/cvsroot/rucksack
In directory clnet:/tmp/cvs-serv30226/rucksack
Modified Files:
queue.lisp
Log Message:
Fix bug in QUEUE-PEEK (fix from Edi Weitz).
--- /project/rucksack/cvsroot/rucksack/queue.lisp 2006/05/16 22:01:27 1.2
+++ /project/rucksack/cvsroot/rucksack/queue.lisp 2006/05/18 22:09:40 1.3
@@ -1,4 +1,4 @@
-;; $Id: queue.lisp,v 1.2 2006/05/16 22:01:27 alemmens Exp $
+;; $Id: queue.lisp,v 1.3 2006/05/18 22:09:40 alemmens Exp $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Queues
@@ -78,12 +78,11 @@
(if (null contents)
(and errorp
(error 'empty-queue-error :queue queue))
- (let ((result (first contents)))
- (setf contents (rest contents))
+ (prog1
+ (pop contents)
(when (null contents)
- (setf end nil))
- (decf size)
- result))))
+ (setq end nil))
+ (decf size)))))
(defun queue-empty-p (queue)
@@ -96,13 +95,17 @@
"Returns the first object in the queue that has the given type (and removes
all objects from the queue before it). Returns NIL (and clears the entire queue)
if there is no such object."
- (with-slots (contents)
+ (with-slots (contents size end)
queue
(loop while (and contents
(not (typep (first contents) type)))
- do (setq contents (rest contents)))
+ do (decf size)
+ (pop contents))
+ (when (null contents)
+ (setq end nil))
(first contents)))
+
(defun queue-clear (queue)
"Removes all elements from the queue (and returns the empty queue)."
(with-slots (end contents size)
More information about the rucksack-cvs
mailing list