Mercurial > projects > orange
diff orange/serialization/RegisterWrapper.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 | f7b078e85f7f |
children | 9f6064f9505a |
line wrap: on
line diff
--- a/orange/serialization/RegisterWrapper.d Mon May 31 18:51:56 2010 +0200 +++ b/orange/serialization/RegisterWrapper.d Mon May 31 19:20:14 2010 +0200 @@ -19,25 +19,26 @@ private alias Serializer!(ArchiveType) SerializerType; private alias SerializerType.DataType DataType; private void delegate (T, SerializerType, DataType) dg; - private void function (T, SerializerType, DataType) func; + private bool isDelegate; this (void delegate (T, SerializerType, DataType) dg) { + isDelegate = true; this.dg = dg; } this (void function (T, SerializerType, DataType) func) { - this.func = func; + dg.funcptr = func; } void opCall (T value, SerializerType archive, DataType key) { - if (dg) + if (dg && isDelegate) dg(value, archive, key); - else if (func) - func(value, archive, key); + else if (dg) + dg.funcptr(value, archive, key); } } @@ -46,24 +47,25 @@ private alias Serializer!(ArchiveType) SerializerType; private alias SerializerType.DataType DataType; private void delegate (ref T, SerializerType, DataType) dg; - private void function (ref T, SerializerType, DataType) func; + private bool isDelegate; this (void delegate (ref T, SerializerType, DataType) dg) { + isDelegate = true; this.dg = dg; } this (void function (ref T, SerializerType, DataType) func) { - this.func = func; + dg.funcptr = func; } void opCall (ref T value, SerializerType archive, DataType key) { - if (dg) + if (dg && isDelegate) dg(value, archive, key); - if (func) - func(value, archive, key); + if (dg) + dg.funcptr(value, archive, key); } } \ No newline at end of file