Mercurial > projects > orange
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 |
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 |
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 | 175 template isArchive (T) |
176 { | |
177 const isArchive = is(typeof({ | |
178 alias T.DataType Foo; | |
179 })) && | |
180 | |
181 is(typeof(T.archive(0, TypeOfDataType!(T).init, {}))) && | |
182 is(typeof(T.unarchive!(int))) && | |
183 is(typeof(T.beginArchiving)) && | |
184 is(typeof(T.beginUnarchiving(TypeOfDataType!(T).init))) && | |
185 is(typeof(T.archiveBaseClass!(Object))) && | |
186 is(typeof(T.unarchiveBaseClass!(Object))) && | |
187 is(typeof(T.reset)) && | |
188 is(typeof({TypeOfDataType!(T) a = T.data;})) && | |
189 is(typeof(T.unarchiveAssociativeArrayVisitor!(int[string]))); | |
190 | |
191 } | |
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 | 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 | 196 } |
197 | |
198 template isISerializable (T) | |
199 { | |
200 const isISerializable = is(T : ISerializable); | |
201 } | |
202 | |
203 template TypeOfDataType (T) | |
204 { | |
205 alias T.DataType TypeOfDataType; | |
206 } |