# HG changeset patch # User Jacob Carlborg # Date 1290357440 -3600 # Node ID c68d29967c9fd3e15ee438775d88a7051f206865 # Parent 9d1a8023bb8905b5354e74555a4451bbded81efb Fixed some bugs in the handling of pointers. diff -r 9d1a8023bb89 -r c68d29967c9f orange/serialization/Serializer.d --- 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 diff -r 9d1a8023bb89 -r c68d29967c9f orange/serialization/archives/XMLArchive.d --- 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);