diff orange/serialization/RegisterWrapper.d @ 4:470ab5270d0c

Simplified the implementation of RegisterWrapper. Fixed: the base class of an object was not serialized
author Jacob Carlborg <doob@me.com>
date Mon, 31 May 2010 19:20:14 +0200
parents f7b078e85f7f
children 9f6064f9505a
line wrap: on
line diff
--- a/orange/serialization/RegisterWrapper.d	Mon May 31 18:51:56 2010 +0200
+++ b/orange/serialization/RegisterWrapper.d	Mon May 31 19:20:14 2010 +0200
@@ -19,25 +19,26 @@
 	private alias Serializer!(ArchiveType) SerializerType;
 	private alias SerializerType.DataType DataType;
 	private void delegate (T, SerializerType, DataType) dg;
-	private void function (T, SerializerType, DataType) func;
+	private bool isDelegate;
 
 	this (void delegate (T, SerializerType, DataType) dg)
 	{
+		isDelegate = true;
 		this.dg = dg;
 	}
 
 	this (void function (T, SerializerType, DataType) func)
 	{
-		this.func = func;
+		dg.funcptr = func;
 	}
 
 	void opCall (T value, SerializerType archive, DataType key)
 	{
-		if (dg)
+		if (dg && isDelegate)
 			dg(value, archive, key);
 		
-		else if (func)
-			func(value, archive, key);
+		else if (dg)
+			dg.funcptr(value, archive, key);
 	}
 }
 
@@ -46,24 +47,25 @@
 	private alias Serializer!(ArchiveType) SerializerType;
 	private alias SerializerType.DataType DataType;
 	private void delegate (ref T, SerializerType, DataType) dg;
-	private void function (ref T, SerializerType, DataType) func;
+	private bool isDelegate;
 
 	this (void delegate (ref T, SerializerType, DataType) dg)
 	{
+		isDelegate = true;
 		this.dg = dg;
 	}
 
 	this (void function (ref T, SerializerType, DataType) func)
 	{
-		this.func = func;
+		dg.funcptr = func;
 	}
 
 	void opCall (ref T value, SerializerType archive, DataType key)
 	{
-		if (dg)
+		if (dg && isDelegate)
 			dg(value, archive, key);
 		
-		if (func)
-			func(value, archive, key);
+		if (dg)
+			dg.funcptr(value, archive, key);
 	}
 }
\ No newline at end of file