diff orange/serialization/Serializer.d @ 31:c68d29967c9f experimental

Fixed some bugs in the handling of pointers.
author Jacob Carlborg <doob@me.com>
date Sun, 21 Nov 2010 17:37:20 +0100
parents 9d1a8023bb89
children 9df3b7a46a51
line wrap: on
line diff
--- a/orange/serialization/Serializer.d	Sun Nov 21 17:12:24 2010 +0100
+++ b/orange/serialization/Serializer.d	Sun Nov 21 17:37:20 2010 +0100
@@ -65,7 +65,7 @@
 		Array[Id] serializedArrays;
 		void[][Id] deserializedSlices;
 		
-		Id[void*] serializedPointers;
+		void*[Id] serializedPointers;
 		Id[void*] serializedValues;
 		
 		bool hasBegunSerializing;
@@ -747,7 +747,7 @@
 	
 	private void addSerializedPointer (T) (T value, Id id)
 	{
-		serializedPointers[value] = id;
+		serializedPointers[id] = value;
 	}
 	
 	private Id getSerializedReference (T) (T value)
@@ -780,14 +780,6 @@
 			return cast(T*) array;
 	}
 	
-	private Id getSerializedPointer (T) (T value)
-	{
-		if (auto tmp = cast(void*) value in serializedPointers)
-			return *tmp;
-		
-		return Id.max;
-	}
-	
 	private T[] toSlice (T) (T[] array, Slice slice)
 	{
 		return array[slice.offset .. slice.offset + slice.length];
@@ -871,9 +863,9 @@
 	
 	private void postProcessPointers ()
 	{
-		foreach (key, pointerId ; serializedPointers)
+		foreach (pointerId, value ; serializedPointers)
 		{
-			if (auto pointeeId = key in serializedValues)
+			if (auto pointeeId = value in serializedValues)
 				archive.archivePointer(pointerId, *pointeeId);
 			
 			else