]> gitweb.factorcode.org Git - factor.git/blob - basis/models/delay/delay.factor
b7c9e7e8ed88fe985a8243c42d4288be799621f6
[factor.git] / basis / models / delay / delay.factor
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: accessors fry kernel models timers ;\r
4 IN: models.delay\r
5 \r
6 TUPLE: delay < model model timeout timer ;\r
7 \r
8 : update-delay-model ( delay -- )\r
9     [ model>> value>> ] keep set-model ;\r
10 \r
11 : <delay> ( model timeout -- delay )\r
12     f delay new-model\r
13         swap >>timeout\r
14         over >>model\r
15     [ add-dependency ] keep ;\r
16 \r
17 : stop-delay ( delay -- )\r
18     timer>> [ stop-timer ] when* ;\r
19 \r
20 : start-delay ( delay -- )\r
21     [ '[ _ f >>timer update-delay-model ] ]\r
22     [ timeout>> later ]\r
23     [ timer<< ] tri ;\r
24 \r
25 M: delay model-changed nip dup stop-delay start-delay ;\r
26 \r
27 M: delay model-activated update-delay-model ;\r