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
9 SYMBOLS: alien-handle-counter alien-handles ;
11 alien-handle-counter [ 0 ] initialize
12 alien-handles [ H{ } clone ] initialize
14 : biggest-handle ( -- n )
17 : (next-handle) ( -- n )
18 alien-handle-counter [ 1 + biggest-handle bitand dup ] change-global ; inline
20 : next-handle ( -- n )
21 [ (next-handle) dup alien-handles get-global key? ] [ drop ] while ;
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
30 : alien-handle? ( int -- ? )
31 alien-handles get-global key? >boolean ; inline
33 : release-alien-handle ( int -- )
34 alien-handles get-global delete-at ; inline
36 DESTRUCTOR: release-alien-handle
38 : <alien-handle-ptr> ( object -- void* )
39 <alien-handle> <alien> ; inline
40 : alien-handle-ptr> ( void* -- object )
41 alien-address alien-handle> ; inline
43 : alien-handle-ptr? ( alien -- ? )
44 alien-address alien-handle? ; inline
46 : release-alien-handle-ptr ( alien -- )
47 alien-address release-alien-handle ; inline
49 DESTRUCTOR: release-alien-handle-ptr