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