]> gitweb.factorcode.org Git - factor.git/blob - extra/alien/handles/handles.factor
Update some copyright headers to follow the current convention
[factor.git] / extra / alien / handles / handles.factor
1 ! Copyright (C) 2010 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.destructors assocs kernel math math.bitwise
4 namespaces ;
5 IN: alien.handles
6
7 <PRIVATE
8
9 SYMBOLS: alien-handle-counter alien-handles ;
10
11 alien-handle-counter [ 0 ] initialize
12 alien-handles [ H{ } clone ] initialize
13
14 : biggest-handle ( -- n )
15     -1 32 bits ; inline
16
17 : (next-handle) ( -- n )
18     alien-handle-counter [ 1 + biggest-handle bitand dup ] change-global ; inline
19
20 : next-handle ( -- n )
21     [ (next-handle) dup alien-handles get-global key? ] [ drop ] while ;
22
23 PRIVATE>
24
25 : <alien-handle> ( object -- int )
26     next-handle [ alien-handles get-global set-at ] keep ; inline
27 : alien-handle> ( int -- object )
28     alien-handles get-global at ; inline
29
30 : alien-handle? ( int -- ? )
31     alien-handles get-global key? >boolean ; inline
32
33 : release-alien-handle ( int -- )
34     alien-handles get-global delete-at ; inline
35
36 DESTRUCTOR: release-alien-handle
37
38 : <alien-handle-ptr> ( object -- void* )
39     <alien-handle> <alien> ; inline
40 : alien-handle-ptr> ( void* -- object )
41     alien-address alien-handle> ; inline
42
43 : alien-handle-ptr? ( alien -- ? )
44     alien-address alien-handle? ; inline
45
46 : release-alien-handle-ptr ( alien -- )
47     alien-address release-alien-handle ; inline
48
49 DESTRUCTOR: release-alien-handle-ptr