inference.state generator debugger words compiler.units
continuations vocabs assocs alien.compiler dlists optimizer
definitions math compiler.errors threads graphs generic
-inference combinators dequeues search-dequeues ;
+inference combinators deques search-deques ;
IN: compiler
SYMBOL: +failed+
} cleave
] curry with-return ;
-: compile-loop ( dequeue -- )
- [ (compile) yield ] slurp-dequeue ;
+: compile-loop ( deque -- )
+ [ (compile) yield ] slurp-deque ;
: decompile ( word -- )
f 2array 1array t modify-code-heap ;
! Copyright (C) 2008 Slava Pestov.\r
! See http://factorcode.org/license.txt for BSD license.\r
-USING: dequeues threads kernel arrays sequences alarms ;\r
+USING: deques threads kernel arrays sequences alarms ;\r
IN: concurrency.conditions\r
\r
-: notify-1 ( dequeue -- )\r
- dup dequeue-empty? [ drop ] [ pop-back resume-now ] if ;\r
+: notify-1 ( deque -- )\r
+ dup deque-empty? [ drop ] [ pop-back resume-now ] if ;\r
\r
-: notify-all ( dequeue -- )\r
- [ resume-now ] slurp-dequeue ;\r
+: notify-all ( deque -- )\r
+ [ resume-now ] slurp-deque ;\r
\r
: queue-timeout ( queue timeout -- alarm )\r
#! Add an alarm which removes the current thread from the\r
! Copyright (C) 2008 Slava Pestov.\r
! See http://factorcode.org/license.txt for BSD license.\r
-USING: dequeues dlists kernel threads continuations math\r
+USING: deques dlists kernel threads continuations math\r
concurrency.conditions ;\r
IN: concurrency.locks\r
\r
\r
: release-write-lock ( lock -- )\r
f over set-rw-lock-writer\r
- dup rw-lock-readers dequeue-empty?\r
+ dup rw-lock-readers deque-empty?\r
[ notify-writer ] [ rw-lock-readers notify-all ] if ;\r
\r
: reentrant-read-lock-ok? ( lock -- ? )\r
! Copyright (C) 2005, 2008 Chris Double, Slava Pestov.\r
! See http://factorcode.org/license.txt for BSD license.\r
IN: concurrency.mailboxes\r
-USING: dlists dequeues threads sequences continuations\r
+USING: dlists deques threads sequences continuations\r
destructors namespaces random math quotations words kernel\r
arrays assocs init system concurrency.conditions accessors\r
debugger debugger.threads ;\r
<dlist> <dlist> f mailbox boa ;\r
\r
: mailbox-empty? ( mailbox -- bool )\r
- data>> dequeue-empty? ;\r
+ data>> deque-empty? ;\r
\r
: mailbox-put ( obj mailbox -- )\r
[ data>> push-front ]\r
! See http://factorcode.org/license.txt for BSD license.
!
USING: kernel threads vectors arrays sequences
-namespaces tools.test continuations dequeues strings math words
+namespaces tools.test continuations deques strings math words
match quotations concurrency.messaging concurrency.mailboxes
concurrency.count-downs accessors ;
IN: concurrency.messaging.tests
-[ ] [ my-mailbox mailbox-data clear-dequeue ] unit-test
+[ ] [ my-mailbox mailbox-data clear-deque ] unit-test
[ "received" ] [
[
! receive drop
! ] "Bad synchronous send" spawn "t" set
-! [ 3 "t" get send-synchronous ] must-fail
\ No newline at end of file
+! [ 3 "t" get send-synchronous ] must-fail
--- /dev/null
+Slava Pestov
--- /dev/null
+IN: deques
+USING: help.markup help.syntax kernel ;
+
+ARTICLE: "deques" "Dequeues"
+"A deque is a data structure with constant-time insertion and removal of elements at both ends. Dequeue operations are defined in the " { $vocab-link "deques" } " vocabulary."
+$nl
+"Dequeues must be instances of a mixin class:"
+{ $subsection deque }
+"Dequeues must implement a protocol."
+$nl
+"Querying the deque:"
+{ $subsection peek-front }
+{ $subsection peek-back }
+{ $subsection deque-length }
+{ $subsection deque-member? }
+"Adding and removing elements:"
+{ $subsection push-front* }
+{ $subsection push-back* }
+{ $subsection pop-front* }
+{ $subsection pop-back* }
+{ $subsection clear-deque }
+"Working with node objects output by " { $link push-front* } " and " { $link push-back* } ":"
+{ $subsection delete-node }
+{ $subsection node-value }
+"Utility operations built in terms of the above:"
+{ $subsection deque-empty? }
+{ $subsection push-front }
+{ $subsection push-all-front }
+{ $subsection push-back }
+{ $subsection push-all-back }
+{ $subsection pop-front }
+{ $subsection pop-back }
+{ $subsection slurp-deque }
+"When using a deque as a queue, the convention is to queue elements with " { $link push-front } " and deque them with " { $link pop-back } "." ;
+
+ABOUT: "deques"
+
+HELP: deque-empty?
+{ $values { "deque" { $link deque } } { "?" "a boolean" } }
+{ $description "Returns true if a deque is empty." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: push-front
+{ $values { "obj" object } { "deque" deque } }
+{ $description "Push the object onto the front of the deque." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: push-front*
+{ $values { "obj" object } { "deque" deque } { "node" "a node" } }
+{ $description "Push the object onto the front of the deque and return the newly created node." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: push-back
+{ $values { "obj" object } { "deque" deque } }
+{ $description "Push the object onto the back of the deque." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: push-back*
+{ $values { "obj" object } { "deque" deque } { "node" "a node" } }
+{ $description "Push the object onto the back of the deque and return the newly created node." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: peek-front
+{ $values { "deque" deque } { "obj" object } }
+{ $description "Returns the object at the front of the deque." } ;
+
+HELP: pop-front
+{ $values { "deque" deque } { "obj" object } }
+{ $description "Pop the object off the front of the deque and return the object." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: pop-front*
+{ $values { "deque" deque } }
+{ $description "Pop the object off the front of the deque." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: peek-back
+{ $values { "deque" deque } { "obj" object } }
+{ $description "Returns the object at the back of the deque." } ;
+
+HELP: pop-back
+{ $values { "deque" deque } { "obj" object } }
+{ $description "Pop the object off the back of the deque and return the object." }
+{ $notes "This operation is O(1)." } ;
+
+HELP: pop-back*
+{ $values { "deque" deque } }
+{ $description "Pop the object off the back of the deque." }
+{ $notes "This operation is O(1)." } ;
--- /dev/null
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel sequences math ;
+IN: deques
+
+GENERIC: push-front* ( obj deque -- node )
+GENERIC: push-back* ( obj deque -- node )
+GENERIC: peek-front ( deque -- obj )
+GENERIC: peek-back ( deque -- obj )
+GENERIC: pop-front* ( deque -- )
+GENERIC: pop-back* ( deque -- )
+GENERIC: delete-node ( node deque -- )
+GENERIC: deque-length ( deque -- n )
+GENERIC: deque-member? ( value deque -- ? )
+GENERIC: clear-deque ( deque -- )
+GENERIC: node-value ( node -- value )
+
+: deque-empty? ( deque -- ? )
+ deque-length zero? ;
+
+: push-front ( obj deque -- )
+ push-front* drop ;
+
+: push-all-front ( seq deque -- )
+ [ push-front ] curry each ;
+
+: push-back ( obj deque -- )
+ push-back* drop ;
+
+: push-all-back ( seq deque -- )
+ [ push-back ] curry each ;
+
+: pop-front ( deque -- obj )
+ [ peek-front ] [ pop-front* ] bi ;
+
+: pop-back ( deque -- obj )
+ [ peek-back ] [ pop-back* ] bi ;
+
+: slurp-deque ( deque quot -- )
+ [ drop [ deque-empty? not ] curry ]
+ [ [ pop-back ] prepose curry ] 2bi [ ] while ; inline
+
+MIXIN: deque
--- /dev/null
+Double-ended queue protocol and common operations
--- /dev/null
+collections
USING: help.markup help.syntax kernel quotations
-dequeues ;
+deques ;
IN: dlists
ARTICLE: "dlists" "Double-linked lists"
-"A double-linked list is the canonical implementation of a " { $link dequeue } "."
+"A double-linked list is the canonical implementation of a " { $link deque } "."
$nl
"Double-linked lists form a class:"
{ $subsection dlist }
{ $subsection dlist? }
"Constructing a double-linked list:"
{ $subsection <dlist> }
-"Double-linked lists support all the operations of the dequeue protocol (" { $link "dequeues" } ") as well as the following."
+"Double-linked lists support all the operations of the deque protocol (" { $link "deques" } ") as well as the following."
$nl
"Iterating over elements:"
{ $subsection dlist-each }
-USING: dequeues dlists dlists.private kernel tools.test random
+USING: deques dlists dlists.private kernel tools.test random
assocs sets sequences namespaces sorting debugger io prettyprint
math accessors classes ;
IN: dlists.tests
-[ t ] [ <dlist> dequeue-empty? ] unit-test
+[ t ] [ <dlist> deque-empty? ] unit-test
[ T{ dlist f T{ dlist-node f 1 f f } T{ dlist-node f 1 f f } 1 } ]
[ <dlist> 1 over push-front ] unit-test
! Make sure empty lists are empty
-[ t ] [ <dlist> dequeue-empty? ] unit-test
-[ f ] [ <dlist> 1 over push-front dequeue-empty? ] unit-test
-[ f ] [ <dlist> 1 over push-back dequeue-empty? ] unit-test
+[ t ] [ <dlist> deque-empty? ] unit-test
+[ f ] [ <dlist> 1 over push-front deque-empty? ] unit-test
+[ f ] [ <dlist> 1 over push-back deque-empty? ] unit-test
[ 1 ] [ <dlist> 1 over push-front pop-front ] unit-test
[ 1 ] [ <dlist> 1 over push-front pop-back ] unit-test
[ t ] [ <dlist> 1 over push-back [ 1 = ] dlist-contains? ] unit-test
[ 1 ] [ <dlist> 1 over push-back [ 1 = ] delete-node-if ] unit-test
-[ t ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop dequeue-empty? ] unit-test
-[ t ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop dequeue-empty? ] unit-test
-[ 0 ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop dequeue-length ] unit-test
-[ 1 ] [ <dlist> 1 over push-back 2 over push-back dup [ 1 = ] delete-node-if drop dequeue-length ] unit-test
-[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 1 = ] delete-node-if drop dequeue-length ] unit-test
-[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 2 = ] delete-node-if drop dequeue-length ] unit-test
-[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 3 = ] delete-node-if drop dequeue-length ] unit-test
-
-[ 0 ] [ <dlist> dequeue-length ] unit-test
-[ 1 ] [ <dlist> 1 over push-front dequeue-length ] unit-test
-[ 0 ] [ <dlist> 1 over push-front dup pop-front* dequeue-length ] unit-test
+[ t ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop deque-empty? ] unit-test
+[ t ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop deque-empty? ] unit-test
+[ 0 ] [ <dlist> 1 over push-back dup [ 1 = ] delete-node-if drop deque-length ] unit-test
+[ 1 ] [ <dlist> 1 over push-back 2 over push-back dup [ 1 = ] delete-node-if drop deque-length ] unit-test
+[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 1 = ] delete-node-if drop deque-length ] unit-test
+[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 2 = ] delete-node-if drop deque-length ] unit-test
+[ 2 ] [ <dlist> 1 over push-back 2 over push-back 3 over push-back dup [ 3 = ] delete-node-if drop deque-length ] unit-test
+
+[ 0 ] [ <dlist> deque-length ] unit-test
+[ 1 ] [ <dlist> 1 over push-front deque-length ] unit-test
+[ 0 ] [ <dlist> 1 over push-front dup pop-front* deque-length ] unit-test
[ t ] [ <dlist> 4 over push-back 5 over push-back [ obj>> 4 = ] dlist-find-node drop class dlist-node = ] unit-test
[ t ] [ <dlist> 4 over push-back 5 over push-back [ obj>> 5 = ] dlist-find-node drop class dlist-node = ] unit-test
[ <dlist> pop-front ] [ empty-dlist? ] must-fail-with
[ <dlist> pop-back ] [ empty-dlist? ] must-fail-with
-[ t ] [ <dlist> 3 over push-front 4 over push-back 3 swap dequeue-member? ] unit-test
+[ t ] [ <dlist> 3 over push-front 4 over push-back 3 swap deque-member? ] unit-test
-[ f ] [ <dlist> 3 over push-front 4 over push-back -1 swap dequeue-member? ] unit-test
+[ f ] [ <dlist> 3 over push-front 4 over push-back -1 swap deque-member? ] unit-test
-[ f ] [ <dlist> 0 swap dequeue-member? ] unit-test
+[ f ] [ <dlist> 0 swap deque-member? ] unit-test
! Copyright (C) 2007, 2008 Mackenzie Straight, Doug Coleman,
! Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: combinators kernel math sequences accessors dequeues
+USING: combinators kernel math sequences accessors deques
summary ;
IN: dlists
dlist new
0 >>length ;
-M: dlist dequeue-length length>> ;
+M: dlist deque-length length>> ;
<PRIVATE
: dlist-contains? ( dlist quot -- ? )
dlist-find nip ; inline
-M: dlist dequeue-member? ( value dlist -- ? )
+M: dlist deque-member? ( value dlist -- ? )
[ = ] with dlist-contains? ;
M: dlist delete-node ( dlist-node dlist -- )
: delete-node-if ( dlist quot -- obj/f )
[ obj>> ] prepose delete-node-if* drop ; inline
-M: dlist clear-dequeue ( dlist -- )
+M: dlist clear-deque ( dlist -- )
f >>front
f >>back
0 >>length
: 1dlist ( obj -- dlist ) <dlist> [ push-front ] keep ;
-INSTANCE: dlist dequeue
+INSTANCE: dlist deque
inference inference.backend inference.dataflow io kernel
kernel.private layouts math namespaces optimizer
optimizer.specializers prettyprint quotations sequences system
-threads words vectors sets dequeues ;
+threads words vectors sets deques ;
IN: generator
SYMBOL: compile-queue
{ $subsection "alists" }
{ $subsection "enums" }
{ $heading "Double-ended queues" }
-{ $subsection "dequeues" }
+{ $subsection "deques" }
"Implementations:"
{ $subsection "dlists" }
-{ $subsection "search-dequeues" }
+{ $subsection "search-deques" }
{ $heading "Other collections" }
{ $subsection "boxes" }
{ $subsection "heaps" }
--- /dev/null
+Slava Pestov
--- /dev/null
+IN: search-deques
+USING: help.markup help.syntax kernel dlists hashtables
+deques assocs ;
+
+ARTICLE: "search-deques" "Search deques"
+"A search deque is a data structure with constant-time insertion and removal of elements at both ends, and constant-time membership tests. Inserting an element more than once has no effect. Search deques implement all deque operations in terms of an underlying deque, and membership testing with " { $link deque-member? } " is implemented with an underlying assoc. Search deques are defined in the " { $vocab-link "search-deques" } " vocabulary."
+$nl
+"Creating a search deque:"
+{ $subsection <search-deque> }
+"Default implementation:"
+{ $subsection <hashed-dlist> } ;
+
+ABOUT: "search-deques"
+
+HELP: <search-deque> ( assoc deque -- search-deque )
+{ $values { "assoc" assoc } { "deque" deque } { "search-deque" search-deque } }
+{ $description "Creates a new " { $link search-deque } "." } ;
+
+HELP: <hashed-dlist> ( -- search-deque )
+{ $values { "search-deque" search-deque } }
+{ $description "Creates a new " { $link search-deque } " backed by a " { $link dlist } ", with a " { $link hashtable } " for fast membership tests." } ;
--- /dev/null
+IN: search-deques.tests
+USING: search-deques tools.test namespaces
+kernel sequences words deques vocabs ;
+
+<hashed-dlist> "h" set
+
+[ t ] [ "h" get deque-empty? ] unit-test
+
+[ ] [ 3 "h" get push-front* "1" set ] unit-test
+[ ] [ 1 "h" get push-front ] unit-test
+[ ] [ 3 "h" get push-front* "2" set ] unit-test
+[ ] [ 3 "h" get push-front* "3" set ] unit-test
+[ ] [ 7 "h" get push-front ] unit-test
+
+[ t ] [ "1" get "2" get eq? ] unit-test
+[ t ] [ "2" get "3" get eq? ] unit-test
+
+[ 3 ] [ "h" get deque-length ] unit-test
+[ t ] [ 7 "h" get deque-member? ] unit-test
+
+[ 3 ] [ "1" get node-value ] unit-test
+[ ] [ "1" get "h" get delete-node ] unit-test
+
+[ 2 ] [ "h" get deque-length ] unit-test
+[ 1 ] [ "h" get pop-back ] unit-test
+[ 7 ] [ "h" get pop-back ] unit-test
+
+[ f ] [ 7 "h" get deque-member? ] unit-test
+
+[ ] [
+ <hashed-dlist>
+ [ all-words swap [ push-front ] curry each ]
+ [ [ drop ] slurp-deque ]
+ bi
+] unit-test
--- /dev/null
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors kernel assocs deques dlists hashtables ;
+IN: search-deques
+
+TUPLE: search-deque assoc deque ;
+
+C: <search-deque> search-deque
+
+: <hashed-dlist> ( -- search-deque )
+ 0 <hashtable> <dlist> <search-deque> ;
+
+M: search-deque deque-length deque>> deque-length ;
+
+M: search-deque peek-front deque>> peek-front ;
+
+M: search-deque peek-back deque>> peek-back ;
+
+M: search-deque push-front*
+ 2dup assoc>> at* [ 2nip ] [
+ drop
+ [ deque>> push-front* ] [ assoc>> ] 2bi
+ [ 2drop ] [ set-at ] 3bi
+ ] if ;
+
+M: search-deque push-back*
+ 2dup assoc>> at* [ 2nip ] [
+ drop
+ [ deque>> push-back* ] [ assoc>> ] 2bi
+ [ 2drop ] [ set-at ] 3bi
+ ] if ;
+
+M: search-deque pop-front*
+ [ [ deque>> peek-front ] [ assoc>> ] bi delete-at ]
+ [ deque>> pop-front* ]
+ bi ;
+
+M: search-deque pop-back*
+ [ [ deque>> peek-back ] [ assoc>> ] bi delete-at ]
+ [ deque>> pop-back* ]
+ bi ;
+
+M: search-deque delete-node
+ [ deque>> delete-node ]
+ [ [ node-value ] [ assoc>> ] bi* delete-at ] 2bi ;
+
+M: search-deque clear-deque
+ [ deque>> clear-deque ] [ assoc>> clear-assoc ] bi ;
+
+M: search-deque deque-member?
+ assoc>> key? ;
+
+INSTANCE: search-deque deque
--- /dev/null
+Double-ended queues with sub-linear membership testing
--- /dev/null
+collections
USING: help.markup help.syntax kernel kernel.private io
threads.private continuations dlists init quotations strings
-assocs heaps boxes namespaces dequeues ;
+assocs heaps boxes namespaces deques ;
IN: threads
ARTICLE: "threads-start/stop" "Starting and stopping threads"
{ $var-description "Global variable holding the queue of runnable threads. Calls to " { $link yield } " switch to the thread which has been in the queue for the longest period of time."
$nl
"By convention, threads are queued with " { $link push-front }
-" and dequeued with " { $link pop-back } "." } ;
+" and dequed with " { $link pop-back } "." } ;
HELP: resume
{ $values { "thread" thread } }
USING: arrays hashtables heaps kernel kernel.private math
namespaces sequences vectors continuations continuations.private
dlists assocs system combinators init boxes accessors
-math.order dequeues strings quotations ;
+math.order deques strings quotations ;
IN: threads
SYMBOL: initial-thread
: sleep-time ( -- ms/f )
{
- { [ run-queue dequeue-empty? not ] [ 0 ] }
+ { [ run-queue deque-empty? not ] [ 0 ] }
{ [ sleep-queue heap-empty? ] [ f ] }
[ sleep-queue heap-peek nip millis [-] ]
} cond ;
: next ( -- * )
expire-sleep-loop
- run-queue dup dequeue-empty? [
+ run-queue dup deque-empty? [
drop no-runnable-threads
] [
pop-back dup array? [ first2 ] [ f swap ] if (next)
--- /dev/null
+boot.x86.32.image 07cd1d5506e508e8054d22f03cd0e63b
+boot.x86.64.image 4e99cd0902df35bbef4d1ad30559d911
+boot.linux-ppc.image 2188d87eb2920b7f34b5c6f2ddf7bd27
+boot.macosx-ppc.image 37e05c8b04df0386032959bdbd9dc9cc
USING: io.files kernel sequences accessors
-dlists dequeues arrays sequences.lib ;
+dlists deques arrays sequences.lib ;
IN: io.paths
TUPLE: directory-iterator path bfs queue ;
dup path>> over push-directory ;
: next-file ( iter -- file/f )
- dup queue>> dequeue-empty? [ drop f ] [
+ dup queue>> deque-empty? [ drop f ] [
dup queue>> pop-back first2
[ over push-directory next-file ] [ nip ] if
] if ;
IN: ui.gadgets.tests
USING: accessors ui.gadgets ui.gadgets.packs ui.gadgets.worlds
-tools.test namespaces models kernel dlists dequeues math sets
+tools.test namespaces models kernel dlists deques math sets
math.parser ui sequences hashtables assocs io arrays prettyprint
io.streams.string math.geometry.rect ;
[
<dlist> \ graft-queue [
[ ] [ <mock-gadget> dup queue-graft unqueue-graft ] unit-test
- [ t ] [ graft-queue dequeue-empty? ] unit-test
+ [ t ] [ graft-queue deque-empty? ] unit-test
] with-variable
<dlist> \ graft-queue [
- [ t ] [ graft-queue dequeue-empty? ] unit-test
+ [ t ] [ graft-queue deque-empty? ] unit-test
<mock-gadget> "g" set
[ ] [ "g" get queue-graft ] unit-test
- [ f ] [ graft-queue dequeue-empty? ] unit-test
+ [ f ] [ graft-queue deque-empty? ] unit-test
[ { f t } ] [ "g" get gadget-graft-state ] unit-test
[ ] [ "g" get graft-later ] unit-test
[ { f t } ] [ "g" get gadget-graft-state ] unit-test
[ ] [ "g" get ungraft-later ] unit-test
[ { f f } ] [ "g" get gadget-graft-state ] unit-test
- [ t ] [ graft-queue dequeue-empty? ] unit-test
+ [ t ] [ graft-queue deque-empty? ] unit-test
[ ] [ "g" get ungraft-later ] unit-test
[ ] [ "g" get graft-later ] unit-test
[ ] [ notify-queued ] unit-test
[ { t t } ] [ "g" get gadget-graft-state ] unit-test
- [ t ] [ graft-queue dequeue-empty? ] unit-test
+ [ t ] [ graft-queue deque-empty? ] unit-test
[ ] [ "g" get graft-later ] unit-test
[ 1 ] [ "g" get mock-gadget-graft-called ] unit-test
[ ] [ "g" get ungraft-later ] unit-test
[ { f t } ] [ "1" get gadget-graft-state ] unit-test
[ { f t } ] [ "2" get gadget-graft-state ] unit-test
[ { f t } ] [ "3" get gadget-graft-state ] unit-test
- [ ] [ graft-queue [ "x" print notify ] slurp-dequeue ] unit-test
+ [ ] [ graft-queue [ "x" print notify ] slurp-deque ] unit-test
[ ] [ notify-queued ] unit-test
[ V{ { t t } } ] [ status-flags ] unit-test
] with-variable ;
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays hashtables kernel models math namespaces
sequences quotations math.vectors combinators sorting
- binary-search vectors dlists dequeues models threads
+ binary-search vectors dlists deques models threads
concurrency.flags math.order math.geometry.rect ;
IN: ui.gadgets
! Copyright (C) 2006, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays assocs io kernel math models namespaces
-prettyprint dlists dequeues sequences threads sequences words
+prettyprint dlists deques sequences threads sequences words
debugger ui.gadgets ui.gadgets.worlds ui.gadgets.tracks
ui.gestures ui.backend ui.render continuations init combinators
hashtables concurrency.flags sets accessors ;
: event-loop? ( -- ? )
{
{ [ stop-after-last-window? get not ] [ t ] }
- { [ graft-queue dequeue-empty? not ] [ t ] }
+ { [ graft-queue deque-empty? not ] [ t ] }
{ [ windows get-global empty? not ] [ t ] }
[ f ]
} cond ;
in-layout? on
layout-queue [
dup layout find-world [ , ] when*
- ] slurp-dequeue
+ ] slurp-deque
] { } make prune ;
: redraw-worlds ( seq -- )
} case ;
: notify-queued ( -- )
- graft-queue [ notify ] slurp-dequeue ;
+ graft-queue [ notify ] slurp-deque ;
: update-ui ( -- )
[ notify-queued layout-queued redraw-worlds ] assert-depth ;