Mercurial > projects > orange
annotate 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 |
rev | line source |
---|---|
0 | 1 /** |
2 * Copyright: Copyright (c) 2010 Jacob Carlborg. | |
3 * Authors: Jacob Carlborg | |
4 * Version: Initial created: Jan 26, 2010 | |
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) | |
6 */ | |
7 module orange.serialization.Serializable; | |
8 | |
9 import orange.serialization.archives.Archive; | |
10 import orange.serialization.Events; | |
39 | 11 import orange.serialization.Serializer; |
0 | 12 import orange.util.CTFE; |
13 | |
39 | 14 interface Serializable |
0 | 15 { |
39 | 16 void toData (Serializer serializer, Serializer.Data key); |
17 void fromData (Serializer serializer, Serializer.Data key); | |
18 } | |
19 | |
20 template isSerializable (T) | |
21 { | |
22 const isSerializable = is(T : Serializable) || ( | |
23 is(typeof(T.toData(Serializer.init, Serializer.Data.init))) && | |
24 is(typeof(T.fromData(Serializer.init, Serializer.Data.init)))); | |
0 | 25 } |
26 | |
27 template NonSerialized (alias field) | |
28 { | |
29 NonSerializedField!(field) __nonSerialized; | |
30 } | |
31 | |
32 struct NonSerializedField (alias f) | |
33 { | |
34 const field = f.stringof; | |
35 } | |
36 | |
35
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
37 package: |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
38 |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
39 version (Tango) |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
40 { |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
41 const nonSerializedField = "__nonSerialized"; |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
42 const serializedField = "__serialized"; |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
43 const internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField]; |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
44 } |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
45 |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
46 else |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
47 { |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
48 mixin( |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
49 `enum nonSerializedField = "__nonSerialized"; |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
50 enum serializedField = "__serialized"; |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
51 enum internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField];`); |
511d1ef4e299
Now all unit tests pass on latest DMD2 compiler.
Jacob Carlborg <doob@me.com>
parents:
0
diff
changeset
|
52 } |