Merge branch 'master' of git://factorcode.org/git/factor
[factor/jcg.git] / basis / boxes / boxes.factor
blob39f8eb44cc354c3a68e19396a0dd69943e21d963
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: kernel accessors ;\r
4 IN: boxes\r
5 \r
6 TUPLE: box value occupied ;\r
7 \r
8 : <box> ( -- box ) box new ;\r
9 \r
10 ERROR: box-full box ;\r
12 : >box ( value box -- )\r
13     dup occupied>>\r
14     [ box-full ] [ t >>occupied (>>value) ] if ;\r
16 ERROR: box-empty box ;\r
18 : box> ( box -- value )\r
19     dup occupied>>\r
20     [ [ f ] change-value f >>occupied drop ] [ box-empty ] if ;\r
22 : ?box ( box -- value/f ? )\r
23     dup occupied>> [ box> t ] [ drop f f ] if ;\r
25 : if-box? ( box quot -- )\r
26     [ ?box ] dip [ drop ] if ; inline\r