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