diff orange/serialization/Serializer.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 3c155e4c3d56
children 613a0bb20207
line wrap: on
line diff
--- a/orange/serialization/Serializer.d	Mon May 31 18:51:56 2010 +0200
+++ b/orange/serialization/Serializer.d	Mon May 31 19:20:14 2010 +0200
@@ -423,25 +423,6 @@
 		});
 	}
 	
-	private void objectStructSerializeHelper (T : Object) (T value)
-	{
-		const nonSerializedFields = collectAnnotations!(nonSerializedField)(value);
-		
-		foreach (i, dummy ; typeof(T.tupleof))
-		{
-			const field = nameOfFieldAt!(T, i);
-			
-			static if (!internalFields.ctfeContains(field) && !nonSerializedFields.ctfeContains(field))
-			{
-				alias typeof(T.tupleof[i]) Type;				
-				Type v = value.tupleof[i];
-				serialize(v, toDataType(field));
-			}				
-		}
-		
-		serializeBaseTypes(value);
-	}
-	
 	private void objectStructSerializeHelper (T) (ref T value)
 	{
 		static assert(isStruct!(T) || isObject!(T), format!(`The given value of the type "`, T, `" is not a valid type, the only valid types for this method are objects and structs.`));
@@ -458,25 +439,9 @@
 				serialize(v, toDataType(field));
 			}				
 		}
-	}
-	
-	private void objectStructDeserializeHelper (T : Object) (T value)
-	{		
-		const nonSerializedFields = collectAnnotations!(nonSerializedField)(value);
 		
-		foreach (i, dummy ; typeof(T.tupleof))
-		{
-			const field = nameOfFieldAt!(T, i);
-						
-			static if (!internalFields.ctfeContains(field) && !nonSerializedFields.ctfeContains(field))
-			{
-				alias TypeOfField!(T, field) Type;
-				auto fieldValue = deserializeInternal!(Type)(toDataType(field));
-				value.tupleof[i] = fieldValue;
-			}			
-		}
-		
-		deserializeBaseTypes(value);
+		static if (isObject!(T) && !is(T == Object))
+			serializeBaseTypes(value);
 	}
 	
 	private void objectStructDeserializeHelper (T) (ref T value)
@@ -495,6 +460,9 @@
 				value.tupleof[i] = fieldValue;
 			}			
 		}
+		
+		static if (isObject!(T) && !is(T == Object))
+			deserializeBaseTypes(value);
 	}
 	
 	private void serializeBaseTypes (T : Object) (T value)
@@ -504,7 +472,8 @@
 		static if (!is(Base == Object))
 		{
 			archive.archiveBaseClass!(Base)(nextKey);
-			objectStructSerializeHelper!(Base)(value);
+			Base base = value;
+			objectStructSerializeHelper(base);
 		}
 	}
 	
@@ -515,7 +484,8 @@
 		static if (!is(Base == Object))
 		{
 			archive.unarchiveBaseClass!(Base)(nextKey);
-			objectStructDeserializeHelper!(Base)(value);
+			Base base = value;
+			objectStructDeserializeHelper(base);
 		}
 	}