annotate orange/util/Traits.d @ 17:c4e7e64ffb67

Changed toData/fromData to take an instance of the serializer instead of the archive.
author Jacob Carlborg <doob@me.com>
date Sun, 08 Aug 2010 21:59:59 +0200
parents 11a31bd929f9
children 78e5fef4bbf2
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.util.Traits;
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.Serializable;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
10 import orange.serialization.archives.Archive;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
11 import orange.util._;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
12
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
13 version (Tango)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
14 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
15 import Tango = tango.core.Traits;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
16 alias Tango.BaseTypeTupleOf BaseTypeTupleOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
17 alias Tango.ParameterTupleOf ParameterTupleOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
18 alias Tango.ReturnTypeOf ReturnTypeOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
19 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
20
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
21 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
22 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
23 import Phobos = std.traits;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
24 alias Phobos.BaseTypeTuple BaseTypeTupleOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
25 alias Phobos.ParameterTypeTuple ParameterTupleOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
26 alias Phobos.ReturnType ReturnTypeOf;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
27
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
28 version = Phobos;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
29 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
30
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
31 template isPrimitive (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
32 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
33 const bool isPrimitive = is(T == bool) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
34 is(T == byte) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
35 is(T == cdouble) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
36 //is(T == cent) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
37 is(T == cfloat) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
38 is(T == char) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
39 is(T == creal) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
40 is(T == dchar) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
41 is(T == double) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
42 is(T == float) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
43 is(T == idouble) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
44 is(T == ifloat) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
45 is(T == int) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
46 is(T == ireal) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
47 is(T == long) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
48 is(T == real) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
49 is(T == short) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
50 is(T == ubyte) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
51 //is(T == ucent) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
52 is(T == uint) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
53 is(T == ulong) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
54 is(T == ushort) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
55 is(T == wchar);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
56 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
57
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
58 template isChar (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
59 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
60 const bool isChar = is(T == char) || is(T == wchar) || is(T == dchar);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
61 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
62
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
63 template isClass (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
64 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
65 const bool isClass = is(T == class);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
66 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
67
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
68 template isInterface (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
69 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
70 const bool isInterface = is(T == interface);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
71 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
72
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
73 template isObject (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
74 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
75 const bool isObject = isClass!(T) || isInterface!(T);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
76 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
77
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
78 template isStruct (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
79 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
80 const bool isStruct = is(T == struct);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
81 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
82
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
83 template isArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
84 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
85 static if (is(T U : U[]))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
86 const bool isArray = true;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
87
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
88 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
89 const bool isArray = false;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
90 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
91
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
92 template isString (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
93 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
94 const bool isString = is(T : char[]) || is(T : wchar[]) || is(T : dchar[]);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
95 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
96
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
97 template isAssociativeArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
98 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
99 const bool isAssociativeArray = is(typeof(T.init.values[0])[typeof(T.init.keys[0])] == T);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
100 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
101
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
102 template isPointer (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
103 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
104 static if (is(T U : U*))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
105 const bool isPointer = true;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
106
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
107 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
108 const bool isPointer = false;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
109 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
110
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
111 template isFunctionPointer (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
112 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
113 const bool isFunctionPointer = is(typeof(*T) == function);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
114 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
115
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
116 template isEnum (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
117 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
118 const bool isEnum = is(T == enum);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
119 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
120
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
121 template isReference (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
122 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
123 const bool isReference = isObject!(T) || isPointer!(T);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
124 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
125
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
126 template isTypeDef (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
127 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
128 const bool isTypeDef = is(T == typedef);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
129 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
130
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
131 template isVoid (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
132 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
133 const bool isVoid = is(T == void);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
134 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
135
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
136 template BaseTypeOfArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
137 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
138 static if (is(T U : U[]))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
139 alias BaseTypeOfArray!(U) BaseTypeOfArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
140
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
141 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
142 alias T BaseTypeOfArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
143 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
144
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
145 template BaseTypeOfPointer (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
146 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
147 static if (is(T U : U*))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
148 alias BaseTypeOfPointer!(U) BaseTypeOfPointer;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
149
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
150 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
151 alias T BaseTypeOfPointer;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
152 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
153
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
154 template BaseTypeOfTypeDef (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
155 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
156 static if (is(T U == typedef))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
157 alias BaseTypeOfTypeDef!(U) BaseTypeOfTypeDef;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
158
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
159 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
160 alias T BaseTypeOfTypeDef;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
161 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
162
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
163 template KeyTypeOfAssociativeArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
164 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
165 static assert(isAssociativeArray!(T), "The type needs to be an associative array");
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
166 alias typeof(T.init.keys[0]) KeyTypeOfAssociativeArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
167 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
168
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
169 template ValueTypeOfAssociativeArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
170 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
171 static assert(isAssociativeArray!(T), "The type needs to be an associative array");
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
172 alias typeof(T.init.values[0]) ValueTypeOfAssociativeArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
173 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
174
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
175 template isArchive (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
176 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
177 const isArchive = is(typeof({
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
178 alias T.DataType Foo;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
179 })) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
180
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
181 is(typeof(T.archive(0, TypeOfDataType!(T).init, {}))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
182 is(typeof(T.unarchive!(int))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
183 is(typeof(T.beginArchiving)) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
184 is(typeof(T.beginUnarchiving(TypeOfDataType!(T).init))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
185 is(typeof(T.archiveBaseClass!(Object))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
186 is(typeof(T.unarchiveBaseClass!(Object))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
187 is(typeof(T.reset)) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
188 is(typeof({TypeOfDataType!(T) a = T.data;})) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
189 is(typeof(T.unarchiveAssociativeArrayVisitor!(int[string])));
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
190
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
191 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
192
17
c4e7e64ffb67 Changed toData/fromData to take an instance of the serializer instead of the archive.
Jacob Carlborg <doob@me.com>
parents: 1
diff changeset
193 template isSerializable (T, SerializerType)
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
194 {
17
c4e7e64ffb67 Changed toData/fromData to take an instance of the serializer instead of the archive.
Jacob Carlborg <doob@me.com>
parents: 1
diff changeset
195 const isSerializable = is(typeof(T.toData(SerializerType.init, SerializerType.DataType.init))) && is(typeof(T.fromData(SerializerType.init, SerializerType.DataType.init)));
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
196 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
197
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
198 template isISerializable (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
199 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
200 const isISerializable = is(T : ISerializable);
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
201 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
202
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
203 template TypeOfDataType (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
204 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
205 alias T.DataType TypeOfDataType;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
206 }