Mercurial > projects > orange
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 |
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.util.Traits; | |
8 | |
9 import orange.serialization.Serializable; | |
10 import orange.serialization.archives.Archive; | |
11 import orange.util._; | |
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 | 31 import orange.core.string; |
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 | 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 | 182 template isArchive (T) |
183 { | |
184 const isArchive = is(typeof({ | |
185 alias T.DataType Foo; | |
186 })) && | |
187 | |
188 is(typeof(T.archive(0, TypeOfDataType!(T).init, {}))) && | |
189 is(typeof(T.unarchive!(int))) && | |
190 is(typeof(T.beginArchiving)) && | |
191 is(typeof(T.beginUnarchiving(TypeOfDataType!(T).init))) && | |
192 is(typeof(T.archiveBaseClass!(Object))) && | |
193 is(typeof(T.unarchiveBaseClass!(Object))) && | |
194 is(typeof(T.reset)) && | |
195 is(typeof({TypeOfDataType!(T) a = T.data;})) && | |
196 is(typeof(T.unarchiveAssociativeArrayVisitor!(int[string]))); | |
197 | |
198 } | |
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 | 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 | 203 } |
204 | |
205 template isISerializable (T) | |
206 { | |
207 const isISerializable = is(T : ISerializable); | |
208 } | |
209 | |
210 template TypeOfDataType (T) | |
211 { | |
212 alias T.DataType TypeOfDataType; | |
213 } |