changeset 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
files orange/serialization/Serializer.d orange/serialization/archives/XMLArchive.d
diffstat 2 files changed, 5 insertions(+), 14 deletions(-) [+]
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
--- a/orange/serialization/archives/XMLArchive.d	Sun Nov 21 17:12:24 2010 +0100
+++ b/orange/serialization/archives/XMLArchive.d	Sun Nov 21 17:37:20 2010 +0100
@@ -313,8 +313,7 @@
 			auto parent = lastElement;
 			lastElement = doc.createNode(Tags.pointerTag);
 			
-			lastElement.element(Tags.pointerTag)
-			.attribute(Attributes.keyAttribute, toData(key))
+			lastElement.attribute(Attributes.keyAttribute, toData(key))
 			.attribute(Attributes.idAttribute, toData(id));
 			
 			addArchivedPointer(id, parent, lastElement, key);