2005-12-31 04:20:07 -05:00
|
|
|
! Copyright (C) 2005 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2005-08-23 15:50:32 -04:00
|
|
|
IN: queues
|
|
|
|
USING: errors kernel lists math sequences vectors ;
|
|
|
|
|
|
|
|
TUPLE: queue in out ;
|
2005-12-31 04:20:07 -05:00
|
|
|
|
|
|
|
C: queue ( -- queue ) ;
|
|
|
|
|
|
|
|
: queue-empty? ( queue -- ? )
|
|
|
|
dup queue-in swap queue-out or not ;
|
|
|
|
|
|
|
|
: enque ( obj queue -- )
|
|
|
|
[ queue-in cons ] keep set-queue-in ;
|
|
|
|
|
|
|
|
: deque ( queue -- obj )
|
2005-08-23 15:50:32 -04:00
|
|
|
dup queue-out [
|
|
|
|
uncons rot set-queue-out
|
|
|
|
] [
|
2005-12-31 04:20:07 -05:00
|
|
|
dup queue-in [
|
|
|
|
reverse uncons pick set-queue-out
|
|
|
|
f rot set-queue-in
|
|
|
|
] [
|
|
|
|
"Empty queue" throw
|
|
|
|
] if*
|
2005-09-24 15:21:17 -04:00
|
|
|
] if* ;
|