Mercurial > projects > dstep
diff dstep/foundation/NSKeyedArchiver.d @ 16:19885b43130e
Huge update, the bridge actually works now
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sun, 03 Jan 2010 22:06:11 +0100 |
parents | 89f3c3ef1fd2 |
children | b9de51448c6b |
line wrap: on
line diff
--- a/dstep/foundation/NSKeyedArchiver.d Mon Aug 03 15:31:48 2009 +0200 +++ b/dstep/foundation/NSKeyedArchiver.d Sun Jan 03 22:06:11 2010 +0100 @@ -10,34 +10,190 @@ import dstep.foundation.NSCoder; import dstep.foundation.NSData; import dstep.foundation.NSGeometry; -import dstep.foundation.NSMutableData; +import dstep.foundation.NSObjCRuntime; import dstep.foundation.NSPropertyList; +import dstep.foundation.NSString; import dstep.objc.bridge.Bridge; -import dstep.objc.objc : id; - +import dstep.objc.objc; import bindings = dstep.foundation.NSKeyedArchiver_bindings; -const NSString NSInvalidArchiveOperationException; -const NSString NSInvalidUnarchiveOperationException; +private +{ + NSString NSInvalidArchiveOperationException_; + NSString NSInvalidUnarchiveOperationException_; +} + +NSString NSInvalidArchiveOperationException () +{ + if (NSInvalidArchiveOperationException_) + return NSInvalidArchiveOperationException_; + + return NSInvalidArchiveOperationException_ = new NSString(bindings.NSInvalidArchiveOperationException); +} + +NSString NSInvalidUnarchiveOperationException () +{ + if (NSInvalidUnarchiveOperationException_) + return NSInvalidUnarchiveOperationException_; + + return NSInvalidUnarchiveOperationException_ = new NSString(bindings.NSInvalidUnarchiveOperationException); +} + +const TNSKeyedArchiverObjectSubstitution = ` + + Class classForKeyedArchiver () + { + return invokeObjcSelf!(Class, "classForKeyedArchiver"); + } + + Object replacementObjectForKeyedArchiver (NSKeyedArchiver archiver) + { + return invokeObjcSelf!(Object, "replacementObjectForKeyedArchiver:", NSKeyedArchiver)(archiver); + } + + static NSArray classFallbacksForKeyedArchiver () + { + return invokeObjcSelfClass!(NSArray, "classFallbacksForKeyedArchiver"); + } + + //mixin ObjcBindMethod!(classForKeyedArchiver, "classForKeyedArchiver"); + //mixin ObjcBindMethod!(replacementObjectForKeyedArchiver, "replacementObjectForKeyedArchiver:"); + //mixin ObjcBindClassMethod!(classFallbacksForKeyedArchiver, "classFallbacksForKeyedArchiver"); +`; + +const TNSKeyedUnarchiverObjectSubstitution = ` + + static Class classForKeyedUnarchiver () + { + return invokeObjcSelfClass!(Class, "classForKeyedUnarchiver"); + } + + //mixin ObjcBindClassMethod!(classForKeyedUnarchiver, "classForKeyedUnarchiver"); +`; + +const TNSKeyedUnarchiverDelegate = ` -static this () -{ - NSInvalidArchiveOperationException = new NSString(bindings.NSInvalidArchiveOperationException); - NSInvalidUnarchiveOperationException = new NSString(bindings.NSInvalidUnarchiveOperationException); -} + Class unarchiver (NSKeyedUnarchiver unarchiver, NSString name, NSArray classNames) + { + return invokeObjcSelf!(Class, "unarchiver:cannotDecodeObjectOfClassName:originalClasses:", NSKeyedUnarchiver, NSString, NSArray)(unarchiver, name, classNames); + } + + Object unarchiver (NSKeyedUnarchiver unarchiver, Object object) + { + return invokeObjcSelf!(Object, "unarchiver:didDecodeObject:", NSKeyedUnarchiver, Object)(unarchiver, object); + } + + void unarchiver (NSKeyedUnarchiver unarchiver, Object object, Object newObject) + { + return invokeObjcSelf!(void, "unarchiver:willReplaceObject:withObject:", NSKeyedUnarchiver, Object, Object)(unarchiver, object, newObject); + } + + void unarchiverWillFinish (NSKeyedUnarchiver unarchiver) + { + return invokeObjcSelf!(void, "unarchiverWillFinish:", NSKeyedUnarchiver)(unarchiver); + } + + void unarchiverDidFinish (NSKeyedUnarchiver unarchiver) + { + return invokeObjcSelf!(void, "unarchiverDidFinish:", NSKeyedUnarchiver)(unarchiver); + } + + //mixin ObjcBindMethod!(unarchiver, "unarchiver:cannotDecodeObjectOfClassName:originalClasses:"); + //mixin ObjcBindMethod!(unarchiver, "unarchiver:didDecodeObject:"); + //mixin ObjcBindMethod!(unarchiver, "unarchiver:willReplaceObject:withObject:"); + //mixin ObjcBindMethod!(unarchiverWillFinish, "unarchiverWillFinish:"); + //mixin ObjcBindMethod!(unarchiverDidFinish, "unarchiverDidFinish:"); +`; + +const TNSKeyedArchiverDelegate = ` + + Object archiver (NSKeyedArchiver archiver, Object object) + { + return invokeObjcSelf!(Object, "archiver:willEncodeObject:", NSKeyedArchiver, Object)(archiver, object); + } + + void archiver_didEncodeObject (NSKeyedArchiver archiver, Object object) + { + return invokeObjcSelf!(void, "archiver:didEncodeObject:", NSKeyedArchiver, Object)(archiver, object); + } + + void archiver (NSKeyedArchiver archiver, Object object, Object newObject) + { + return invokeObjcSelf!(void, "archiver:willReplaceObject:withObject:", NSKeyedArchiver, Object, Object)(archiver, object, newObject); + } + + void archiverWillFinish (NSKeyedArchiver archiver) + { + return invokeObjcSelf!(void, "archiverWillFinish:", NSKeyedArchiver)(archiver); + } + + void archiverDidFinish (NSKeyedArchiver archiver) + { + return invokeObjcSelf!(void, "archiverDidFinish:", NSKeyedArchiver)(archiver); + } + + //mixin ObjcBindMethod!(archiver, "archiver:willEncodeObject:"); + //mixin ObjcBindMethod!(archiver_didEncodeObject, "archiver:didEncodeObject:"); + //mixin ObjcBindMethod!(archiver, "archiver:willReplaceObject:withObject::"); + //mixin ObjcBindMethod!(archiverWillFinish, "archiverWillFinish:"); + //mixin ObjcBindMethod!(archiverDidFinish, "archiverDidFinish:"); +`; + +const TNSGeometryKeyedCoding = ` + + void encodePoint (NSPoint point, NSString key) + { + return invokeObjcSelf!(void, "encodePoint:forKey:", NSPoint, NSString)(point, key); + } + + void encodeSize (NSSize size, NSString key) + { + return invokeObjcSelf!(void, "encodeSize:forKey:", NSSize, NSString)(size, key); + } + + void encodeRect (NSRect rect, NSString key) + { + return invokeObjcSelf!(void, "encodeRect:forKey:", NSRect, NSString)(rect, key); + } + + NSPoint decodePointForKey (NSString key) + { + return invokeObjcSelf!(NSPoint, "decodePointForKey:", NSString)(key); + } + + NSSize decodeSizeForKey (NSString key) + { + return invokeObjcSelf!(NSSize, "decodeSizeForKey:", NSString)(key); + } + + NSRect decodeRectForKey (NSString key) + { + return invokeObjcSelf!(NSRect, "decodeRectForKey:", NSString)(key); + } +`; class NSKeyedArchiver : NSCoder { - mixin ObjcWrap; + mixin (ObjcWrap); + + this () + { + super(typeof(this).alloc.init.objcObject); + } + + typeof(this) init () + { + return invokeObjcSelf!(typeof(this), "init"); + } static NSData archivedDataWithRootObject (Object rootObject) { - return invokeObjcSelfClass!(NSData, "archivedDataWithRootObject:", Object)(rootObject); + return invokeObjcSuperClass!(NSData, "archivedDataWithRootObject:", Object)(rootObject); } static bool archiveRootObject (Object rootObject, NSString path) { - return invokeObjcSelfClass!(bool, "archiveRootObject:toFile:", Object, NSString)(rootObject, path); + return invokeObjcSuperClass!(bool, "archiveRootObject:toFile:", Object, NSString)(rootObject, path); } Object initForWritingWithMutableData (NSMutableData data) @@ -47,13 +203,7 @@ this (NSMutableData data) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initForWritingWithMutableData:", NSMutableData)(objcObject, data); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initForWritingWithMutableData(data); } void setDelegate (Object delegate_) @@ -83,7 +233,7 @@ static void setClassName (NSString codedName, Class cls) { - return invokeObjcSelfClass!(void, "setClassName:forClass:", NSString, Class)(codedName, cls); + return invokeObjcSuperClass!(void, "setClassName:forClass:", NSString, Class)(codedName, cls); } void setClassName (NSString codedName, Class cls) @@ -93,7 +243,7 @@ static NSString classNameForClass (Class cls) { - return invokeObjcSelfClass!(NSString, "classNameForClass:", Class)(cls); + return invokeObjcSuperClass!(NSString, "classNameForClass:", Class)(cls); } NSString classNameForClass (Class cls) @@ -149,16 +299,26 @@ class NSKeyedUnarchiver : NSCoder { - mixin ObjcWrap; + mixin (ObjcWrap); + + this () + { + super(typeof(this).alloc.init.objcObject); + } + + typeof(this) init () + { + return invokeObjcSelf!(typeof(this), "init"); + } static Object unarchiveObjectWithData (NSData data) { - return invokeObjcSelfClass!(Object, "unarchiveObjectWithData:", NSData)(data); + return invokeObjcSuperClass!(Object, "unarchiveObjectWithData:", NSData)(data); } static Object unarchiveObjectWithFile (NSString path) { - return invokeObjcSelfClass!(Object, "unarchiveObjectWithFile:", NSString)(path); + return invokeObjcSuperClass!(Object, "unarchiveObjectWithFile:", NSString)(path); } Object initForReadingWithData (NSData data) @@ -168,13 +328,7 @@ this (NSData data) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initForReadingWithData:", NSData)(objcObject, data); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initForReadingWithData(data); } void setDelegate (Object delegate_) @@ -194,7 +348,7 @@ static void setClass (Class cls, NSString codedName) { - return invokeObjcSelfClass!(void, "setClass:forClassName:", Class, NSString)(cls, codedName); + return invokeObjcSuperClass!(void, "setClass:forClassName:", Class, NSString)(cls, codedName); } void setClass (Class cls, NSString codedName) @@ -204,7 +358,7 @@ static Class classForClassName (NSString codedName) { - return invokeObjcSelfClass!(Class, "classForClassName:", NSString)(codedName); + return invokeObjcSuperClass!(Class, "classForClassName:", NSString)(codedName); } Class classForClassName (NSString codedName) @@ -256,68 +410,4 @@ { return invokeObjcSelf!(char*, "decodeBytesForKey:returnedLength:", NSString, NSUInteger*)(key, lengthp); } -} - -template TNSKeyedArchiverObjectSubstitution () -{ - Class classForKeyedArchiver (); - Object replacementObjectForKeyedArchiver (NSKeyedArchiver archiver); - static NSArray classFallbacksForKeyedArchiver (); -} - -template TNSKeyedUnarchiverObjectSubstitution () -{ - static Class classForKeyedUnarchiver (); -} - -template TNSKeyedUnarchiverDelegate () -{ - Class unarchiver (NSKeyedUnarchiver unarchiver, NSString name, NSArray classNames); - Object unarchiver (NSKeyedUnarchiver unarchiver, Object object); - void unarchiver (NSKeyedUnarchiver unarchiver, Object object, Object newObject); - void unarchiverWillFinish (NSKeyedUnarchiver unarchiver); - void unarchiverDidFinish (NSKeyedUnarchiver unarchiver); -} - -template TNSKeyedArchiverDelegate () -{ - Object archiver (NSKeyedArchiver archiver, Object object); - void archiver (NSKeyedArchiver archiver, Object object); - void archiver (NSKeyedArchiver archiver, Object object, Object newObject); - void archiverWillFinish (NSKeyedArchiver archiver); - void archiverDidFinish (NSKeyedArchiver archiver); -} - -template TNSGeometryKeyedCoding () -{ - void encodePoint (NSPoint point, NSString key) - { - return invokeObjcSelf!(void, "encodePoint:forKey:", NSPoint, NSString)(point, key); - } - - void encodeSize (NSSize size, NSString key) - { - return invokeObjcSelf!(void, "encodeSize:forKey:", NSSize, NSString)(size, key); - } - - void encodeRect (NSRect rect, NSString key) - { - return invokeObjcSelf!(void, "encodeRect:forKey:", NSRect, NSString)(rect, key); - } - - NSPoint decodePointForKey (NSString key) - { - return invokeObjcSelf!(NSPoint, "decodePointForKey:", NSString)(key); - } - - NSSize decodeSizeForKey (NSString key) - { - return invokeObjcSelf!(NSSize, "decodeSizeForKey:", NSString)(key); - } - - NSRect decodeRectForKey (NSString key) - { - return invokeObjcSelf!(NSRect, "decodeRectForKey:", NSString)(key); - } -} - +} \ No newline at end of file