annotate orange/util/Traits.d @ 27:fc315d786f24 experimental

Added unit testing.
author Jacob Carlborg <doob@me.com>
date Fri, 19 Nov 2010 11:14:55 +0100
parents 78e5fef4bbf2
children 301476d40518
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
27
fc315d786f24 Added unit testing.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
31 import orange.core.string;
fc315d786f24 Added unit testing.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
32
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
33 template isPrimitive (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
34 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
35 const bool isPrimitive = is(T == bool) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
36 is(T == byte) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
37 is(T == cdouble) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
38 //is(T == cent) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
39 is(T == cfloat) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
40 is(T == char) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
41 is(T == creal) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
42 is(T == dchar) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
43 is(T == double) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
44 is(T == float) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
45 is(T == idouble) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
46 is(T == ifloat) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
47 is(T == int) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
48 is(T == ireal) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
49 is(T == long) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
50 is(T == real) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
51 is(T == short) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
52 is(T == ubyte) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
53 //is(T == ucent) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
54 is(T == uint) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
55 is(T == ulong) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
56 is(T == ushort) ||
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
57 is(T == wchar);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
58 }
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 template isChar (T)
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 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
63 }
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 template isClass (T)
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 const bool isClass = is(T == class);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
68 }
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 template isInterface (T)
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 const bool isInterface = is(T == interface);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
73 }
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 template isObject (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 const bool isObject = isClass!(T) || isInterface!(T);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
78 }
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 template isStruct (T)
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 const bool isStruct = is(T == struct);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
83 }
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 template isArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
86 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
87 static if (is(T U : U[]))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
88 const bool isArray = true;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
89
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
90 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
91 const bool isArray = false;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
92 }
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 template isString (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
95 {
27
fc315d786f24 Added unit testing.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
96 const bool isString = is(T : string) || is(T : wstring) || is(T : dstring);
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
97 }
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 template isAssociativeArray (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 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
102 }
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 template isPointer (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
105 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
106 static if (is(T U : U*))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
107 const bool isPointer = true;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
108
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
109 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
110 const bool isPointer = false;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
111 }
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 template isFunctionPointer (T)
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 const bool isFunctionPointer = is(typeof(*T) == function);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
116 }
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 template isEnum (T)
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 const bool isEnum = is(T == enum);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
121 }
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 template isReference (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 const bool isReference = isObject!(T) || isPointer!(T);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
126 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
127
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
128 template isTypedef (T)
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
129 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
130 const bool isTypedef = is(T == typedef);
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
131 }
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 template isVoid (T)
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 const bool isVoid = is(T == void);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
136 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
137
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
138 template ElementTypeOfArray(T : T[])
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
139 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
140 alias T ElementTypeOfArray;
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
141 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
142
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
143 template BaseTypeOfPointer (T)
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 static if (is(T U : U*))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
146 alias BaseTypeOfPointer!(U) BaseTypeOfPointer;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
147
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
148 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
149 alias T BaseTypeOfPointer;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
150 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
151
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
152 template BaseTypeOfTypedef (T)
1
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 static if (is(T U == typedef))
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
155 alias BaseTypeOfTypedef!(U) BaseTypeOfTypedef;
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
156
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
157 else
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
158 alias T BaseTypeOfTypedef;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
159 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
160
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
161 template BaseTypeOfEnum (T)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
162 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
163 static if (is(T U == enum))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
164 alias BaseTypeOfEnum!(U) BaseTypeOfEnum;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
165
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
166 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 17
diff changeset
167 alias T BaseTypeOfEnum;
1
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
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
170 template KeyTypeOfAssociativeArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
171 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
172 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
173 alias typeof(T.init.keys[0]) KeyTypeOfAssociativeArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
174 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
175
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
176 template ValueTypeOfAssociativeArray (T)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
177 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
178 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
179 alias typeof(T.init.values[0]) ValueTypeOfAssociativeArray;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
180 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
181
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
182 template isArchive (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
183 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
184 const isArchive = is(typeof({
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
185 alias T.DataType Foo;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
186 })) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
187
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
188 is(typeof(T.archive(0, TypeOfDataType!(T).init, {}))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
189 is(typeof(T.unarchive!(int))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
190 is(typeof(T.beginArchiving)) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
191 is(typeof(T.beginUnarchiving(TypeOfDataType!(T).init))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
192 is(typeof(T.archiveBaseClass!(Object))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
193 is(typeof(T.unarchiveBaseClass!(Object))) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
194 is(typeof(T.reset)) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
195 is(typeof({TypeOfDataType!(T) a = T.data;})) &&
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
196 is(typeof(T.unarchiveAssociativeArrayVisitor!(int[string])));
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
197
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
198 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
199
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
200 template isSerializable (T, SerializerType)
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
201 {
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
202 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
203 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
204
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
205 template isISerializable (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
206 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
207 const isISerializable = is(T : ISerializable);
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
208 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
209
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
210 template TypeOfDataType (T)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
211 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
212 alias T.DataType TypeOfDataType;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
213 }