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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
1 /**
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
2 * Copyright: Copyright (c) 2010 Jacob Carlborg.
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
3 * Authors: Jacob Carlborg
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
4 * Version: Initial created: Jan 26, 2010
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
6 */
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
7 module orange.serialization.Serializable;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
8
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
9 import orange.serialization.archives.Archive;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
10 import orange.serialization.Events;
39
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
11 import orange.serialization.Serializer;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
12 import orange.util.CTFE;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
13
39
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
14 interface Serializable
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
15 {
39
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
16 void toData (Serializer serializer, Serializer.Data key);
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
17 void fromData (Serializer serializer, Serializer.Data key);
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
18 }
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
19
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
20 template isSerializable (T)
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
21 {
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
22 const isSerializable = is(T : Serializable) || (
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
23 is(typeof(T.toData(Serializer.init, Serializer.Data.init))) &&
301476d40518 Made a couple of refactorings:
Jacob Carlborg <doob@me.com>
parents: 35
diff changeset
24 is(typeof(T.fromData(Serializer.init, Serializer.Data.init))));
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
25 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
26
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
27 template NonSerialized (alias field)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
28 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
29 NonSerializedField!(field) __nonSerialized;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
30 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
31
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
32 struct NonSerializedField (alias f)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
33 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
34 const field = f.stringof;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
35 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
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 }