handle NSFastEnumeration case when the item pointer is returned in the NSFastEnumerationState struct. add words for converting plist objects to Factor structures

db4
Joe Groff 2008-07-13 12:18:35 -07:00
parent 6d7a41a1b5
commit 8174a0967c
3 changed files with 38 additions and 3 deletions

View File

@ -43,6 +43,7 @@ SYMBOL: super-sent-messages
"NSArray"
"NSAutoreleasePool"
"NSBundle"
"NSData"
"NSDictionary"
"NSError"
"NSEvent"
@ -53,6 +54,7 @@ SYMBOL: super-sent-messages
"NSNib"
"NSNotification"
"NSNotificationCenter"
"NSNumber"
"NSObject"
"NSOpenGLContext"
"NSOpenGLPixelFormat"

View File

@ -12,8 +12,10 @@ IN: cocoa.enumeration
:: (NSFastEnumeration-each) ( object quot state stackbuf count -- )
object state stackbuf count -> countByEnumeratingWithState:objects:count:
dup zero? [ drop ] [
[ stackbuf void*-nth quot call ] each
object quot state stackbuf count (NSFastEnumeration-each)
[
state NSFastEnumerationState-itemsPtr dup stackbuf ?
void*-nth quot call
] each object quot state stackbuf count (NSFastEnumeration-each)
] if ; inline
: NSFastEnumeration-each ( object quot -- )

View File

@ -2,7 +2,8 @@
! See http://factorcode.org/license.txt for BSD license.
USING: strings arrays hashtables assocs sequences
cocoa.messages cocoa.classes cocoa.application cocoa kernel
namespaces io.backend ;
namespaces io.backend math cocoa.enumeration byte-arrays
combinators alien.c-types ;
IN: cocoa.plists
: assoc>NSDictionary ( assoc -- alien )
@ -17,3 +18,33 @@ IN: cocoa.plists
>r assoc>NSDictionary
r> normalize-path <NSString> 0 -> writeToFile:atomically:
[ "write-plist failed" throw ] unless ;
DEFER: plist>
: (plist-NSString>) ( NSString -- string )
-> UTF8String ;
: (plist-NSNumber>) ( NSNumber -- number )
dup -> doubleValue dup >integer =
[ -> longLongValue ]
[ -> doubleValue ] if ;
: (plist-NSData>) ( NSData -- byte-array )
dup -> length <byte-array> [ -> getBytes: ] keep ;
: (plist-NSArray>) ( NSArray -- vector )
[ plist> ] NSFastEnumeration-map ;
: (plist-NSDictionary>) ( NSDictionary -- hashtable )
dup [ [ -> valueForKey: ] keep swap [ plist> ] bi@ 2array ] with
NSFastEnumeration-map >hashtable ;
: plist> ( plist -- value )
{
{ [ dup NSString -> isKindOfClass: c-bool> ] [ (plist-NSString>) ] }
{ [ dup NSNumber -> isKindOfClass: c-bool> ] [ (plist-NSNumber>) ] }
{ [ dup NSData -> isKindOfClass: c-bool> ] [ (plist-NSData>) ] }
{ [ dup NSArray -> isKindOfClass: c-bool> ] [ (plist-NSArray>) ] }
{ [ dup NSDictionary -> isKindOfClass: c-bool> ] [ (plist-NSDictionary>) ] }
[ ]
} cond ;