| 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; |
|---|
| 11 |
import orange.serialization.Serializer; |
|---|
| 12 |
import orange.util.CTFE; |
|---|
| 13 |
|
|---|
| 14 |
interface Serializable |
|---|
| 15 |
{ |
|---|
| 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)))); |
|---|
| 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 |
|
|---|
| 37 |
package: |
|---|
| 38 |
|
|---|
| 39 |
version (Tango) |
|---|
| 40 |
{ |
|---|
| 41 |
const nonSerializedField = "__nonSerialized"; |
|---|
| 42 |
const serializedField = "__serialized"; |
|---|
| 43 |
const internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField]; |
|---|
| 44 |
} |
|---|
| 45 |
|
|---|
| 46 |
else |
|---|
| 47 |
{ |
|---|
| 48 |
mixin( |
|---|
| 49 |
`enum nonSerializedField = "__nonSerialized"; |
|---|
| 50 |
enum serializedField = "__serialized"; |
|---|
| 51 |
enum internalFields = [nonSerializedField[], onDeserializedField, onDeserializingField, onSerializedField, onSerializingField];`); |
|---|
| 52 |
} |
|---|