Mercurial > projects > orange
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);