Mercurial > projects > orange
comparison orange/serialization/Serializable.d @ 39:301476d40518
Made a couple of refactorings:
* Removed Serializable
* Added a Serializable interface
* Moved isSerializable and updated the implementation
* Added new deserialize methods for deserialize without data during deserializing
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Thu, 04 Aug 2011 21:29:56 +0200 |
parents | 511d1ef4e299 |
children |
comparison
equal
deleted
inserted
replaced
38:9443bcddc699 | 39:301476d40518 |
---|---|
6 */ | 6 */ |
7 module orange.serialization.Serializable; | 7 module orange.serialization.Serializable; |
8 | 8 |
9 import orange.serialization.archives.Archive; | 9 import orange.serialization.archives.Archive; |
10 import orange.serialization.Events; | 10 import orange.serialization.Events; |
11 import orange.serialization.Serializer; | |
11 import orange.util.CTFE; | 12 import orange.util.CTFE; |
12 | 13 |
13 template Serializable () | 14 interface Serializable |
14 { | 15 { |
15 void toData (T) (T archive, T.DataType key) | 16 void toData (Serializer serializer, Serializer.Data key); |
16 { | 17 void fromData (Serializer serializer, Serializer.Data key); |
17 alias typeof(this) ThisType; | 18 } |
18 | 19 |
19 foreach (i, dummy ; typeof(T.tupleof)) | 20 template isSerializable (T) |
20 { | 21 { |
21 alias typeof(ThisType.tupleof[i]) FieldType; | 22 const isSerializable = is(T : Serializable) || ( |
22 | 23 is(typeof(T.toData(Serializer.init, Serializer.Data.init))) && |
23 const field = nameOfFieldAt!(ThisType, i); | 24 is(typeof(T.fromData(Serializer.init, Serializer.Data.init)))); |
24 auto value = getValueOfField!(ThisType, FieldType, field)(this); | |
25 | |
26 archive.archive(value, field); | |
27 } | |
28 } | |
29 | |
30 void fromData (T) (T archive, T.DataType key) | |
31 { | |
32 alias typeof(this) ThisType; | |
33 | |
34 foreach (i, dummy ; typeof(ThisType.tupleof)) | |
35 { | |
36 alias typeof(ThisType.tupleof[i]) FieldType; | |
37 | |
38 const field = nameOfFieldAt!(ThisType, i); | |
39 auto value = archive.unarchive!(FieldType)(field); | |
40 | |
41 setValueOfField!(FieldType, ThisType, field)(this, value); | |
42 } | |
43 } | |
44 } | 25 } |
45 | 26 |
46 template NonSerialized (alias field) | 27 template NonSerialized (alias field) |
47 { | 28 { |
48 NonSerializedField!(field) __nonSerialized; | 29 NonSerializedField!(field) __nonSerialized; |