annotate orange/util/CTFE.d @ 2:ea37a9470e3e

Fixed multiple NonSerialized
author Jacob Carlborg <doob@me.com>
date Mon, 31 May 2010 17:44:23 +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.CTFE;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
8
1
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
9 import orange.util.string;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
10 import orange.util.Traits;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
11
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
12 template format (ARGS...)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
13 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
14 static if (ARGS.length == 0)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
15 const format = "";
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
16
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
17 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
18 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
19 static if (is(typeof(ARGS[0]) : string))
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
20 const format = ARGS[0] ~ format!(ARGS[1 .. $]);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
21
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
22 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
23 const format = toString_!(ARGS[0]) ~ format!(ARGS[1 .. $]);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
24 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
25 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
26
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
27 private
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
28 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
29 template toString_ (T)
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 const toString_ = T.stringof;
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
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
34 template toString_ (int i)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
35 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
36 const toString_ = itoa!(i);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
37 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
38
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
39 template toString_ (long l)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
40 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
41 const toString_ = itoa!(l);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
42 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
43
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
44 template toString_ (bool b)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
45 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
46 const toString_ = b ? "true" : "false";
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
47 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
48
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
49 template toString_ (float f)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
50 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
51 const toString_ = "";
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
52 }
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
53
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
54 template toString_ (alias a)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
55 {
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
56 const toString_ = a.stringof;
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 }
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 /**
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
61 * Compile-time function to get the index of the give element.
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 * Performs a linear scan, returning the index of the first occurrence
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
64 * of the specified element in the array, or U.max if the array does
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
65 * not contain the element.
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 * Params:
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
68 * arr = the array to get the index of the element from
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
69 * element = the element to find
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
70 *
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
71 * Returns: the index of the element or size_t.max if the element was not found.
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 size_t indexOf (T) (T[] arr, T element)
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 static if (is(T == char) || is(T == wchar) || is(T == dchar))
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 foreach (i, e ; arr)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
78 if (e == element)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
79 return i;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
80 }
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 else
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 foreach (i, e ; arr)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
85 if (e == element)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
86 return i;
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
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
89 return size_t.max;
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 /**
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
93 * Returns true if the given array contains the given element,
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
94 * otherwise false.
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 * Params:
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
97 * arr = the array to search in for the element
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
98 * element = the element to search for
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
99 *
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
100 * Returns: true if the array contains the element, otherwise false
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 bool contains (T) (T[] arr, T element)
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 return arr.indexOf(element) != size_t.max;
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
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
107 /**
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
108 * CTFE, splits the given string on the given pattern
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 * Params:
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
111 * str = the string to split
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
112 * splitChar = the character to split on
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
113 *
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
114 * Returns: an array of strings containing the splited string
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 T[][] split (T) (T[] str, T splitChar = ',')
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 T[][] arr;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
119 size_t x;
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 foreach (i, c ; str)
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 if (splitChar == c)
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 if (str[x] == splitChar)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
126 x++;
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 arr ~= str[x .. i];
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
129 x = i;
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 }
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 if (str[x] == splitChar)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
134 x++;
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 arr ~= str[x .. $];
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 return arr;
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
139 }
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 private:
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 decimalDigit (int n) // [3]
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 const decimalDigit = "0123456789"[n .. n + 1];
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
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
148 template itoa (long n)
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 static if (n < 0)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
151 const itoa = "-" ~ itoa!(-n);
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 else static if (n < 10)
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
154 const itoa = decimalDigit!(n);
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 else
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
157 const itoa = itoa!(n / 10L) ~ decimalDigit!(n % 10L);
11a31bd929f9 Removed dependency on private library
Jacob Carlborg <doob@me.com>
parents: 0
diff changeset
158 }