comparison 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
comparison
equal deleted inserted replaced
3:3c155e4c3d56 4:470ab5270d0c
17 class SerializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase 17 class SerializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase
18 { 18 {
19 private alias Serializer!(ArchiveType) SerializerType; 19 private alias Serializer!(ArchiveType) SerializerType;
20 private alias SerializerType.DataType DataType; 20 private alias SerializerType.DataType DataType;
21 private void delegate (T, SerializerType, DataType) dg; 21 private void delegate (T, SerializerType, DataType) dg;
22 private void function (T, SerializerType, DataType) func; 22 private bool isDelegate;
23 23
24 this (void delegate (T, SerializerType, DataType) dg) 24 this (void delegate (T, SerializerType, DataType) dg)
25 { 25 {
26 isDelegate = true;
26 this.dg = dg; 27 this.dg = dg;
27 } 28 }
28 29
29 this (void function (T, SerializerType, DataType) func) 30 this (void function (T, SerializerType, DataType) func)
30 { 31 {
31 this.func = func; 32 dg.funcptr = func;
32 } 33 }
33 34
34 void opCall (T value, SerializerType archive, DataType key) 35 void opCall (T value, SerializerType archive, DataType key)
35 { 36 {
36 if (dg) 37 if (dg && isDelegate)
37 dg(value, archive, key); 38 dg(value, archive, key);
38 39
39 else if (func) 40 else if (dg)
40 func(value, archive, key); 41 dg.funcptr(value, archive, key);
41 } 42 }
42 } 43 }
43 44
44 class DeserializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase 45 class DeserializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase
45 { 46 {
46 private alias Serializer!(ArchiveType) SerializerType; 47 private alias Serializer!(ArchiveType) SerializerType;
47 private alias SerializerType.DataType DataType; 48 private alias SerializerType.DataType DataType;
48 private void delegate (ref T, SerializerType, DataType) dg; 49 private void delegate (ref T, SerializerType, DataType) dg;
49 private void function (ref T, SerializerType, DataType) func; 50 private bool isDelegate;
50 51
51 this (void delegate (ref T, SerializerType, DataType) dg) 52 this (void delegate (ref T, SerializerType, DataType) dg)
52 { 53 {
54 isDelegate = true;
53 this.dg = dg; 55 this.dg = dg;
54 } 56 }
55 57
56 this (void function (ref T, SerializerType, DataType) func) 58 this (void function (ref T, SerializerType, DataType) func)
57 { 59 {
58 this.func = func; 60 dg.funcptr = func;
59 } 61 }
60 62
61 void opCall (ref T value, SerializerType archive, DataType key) 63 void opCall (ref T value, SerializerType archive, DataType key)
62 { 64 {
63 if (dg) 65 if (dg && isDelegate)
64 dg(value, archive, key); 66 dg(value, archive, key);
65 67
66 if (func) 68 if (dg)
67 func(value, archive, key); 69 dg.funcptr(value, archive, key);
68 } 70 }
69 } 71 }