Update Unicode docs
[factor/jcg.git] / basis / cocoa / enumeration / enumeration.factor
blob7f5b77728332eda4941093f4db1308abdd5d8f0c
1 ! Copyright (C) 2008 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel cocoa cocoa.types alien.c-types locals math
4 sequences vectors fry libc destructors
5 specialized-arrays.direct.alien ;
6 IN: cocoa.enumeration
8 : NS-EACH-BUFFER-SIZE 16 ; inline
10 : with-enumeration-buffers ( quot -- )
11     [
12         [
13             "NSFastEnumerationState" malloc-object &free
14             NS-EACH-BUFFER-SIZE "id" heap-size * malloc-object &free
15             NS-EACH-BUFFER-SIZE
16         ] dip call
17     ] with-destructors ; inline
19 :: (NSFastEnumeration-each) ( object quot: ( elt -- ) state stackbuf count -- )
20     object state stackbuf count -> countByEnumeratingWithState:objects:count:
21     dup 0 = [ drop ] [
22         state NSFastEnumerationState-itemsPtr [ stackbuf ] unless*
23         swap <direct-void*-array> quot each
24         object quot state stackbuf count (NSFastEnumeration-each)
25     ] if ; inline recursive
27 : NSFastEnumeration-each ( object quot -- )
28     [ (NSFastEnumeration-each) ] with-enumeration-buffers ; inline
30 : NSFastEnumeration-map ( object quot -- vector )
31     NS-EACH-BUFFER-SIZE <vector>
32     [ '[ @ _ push ] NSFastEnumeration-each ] keep ; inline
34 : NSFastEnumeration>vector ( object -- vector )
35     [ ] NSFastEnumeration-map ;