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