annotate qt/qtd/util/Tuple.d @ 288:f9559a957be9 signals

new signals and slots implementation
author eldar
date Sun, 08 Nov 2009 19:28:01 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
288
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
1 /**
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
2 * Tuple-related stuff.
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
3 *
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
4 * Authors: Daniel Keep <daniel.keep@gmail.com>
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
5 * Copyright: See LICENSE.
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
6 */
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
7 module qt.qtd.util.Tuple;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
8
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
9 import std.typetuple;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
10
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
11 /**
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
12 * Sequence can be used to generate a tuple of integer values. It can be
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
13 * used in one of three forms:
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
14 *
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
15 * -----
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
16 * Sequence!(6) // ==> (0, 1, 2, 3, 4, 5)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
17 * Sequence!(1,6) // ==> (1, 2, 3, 4, 5)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
18 * Sequence!(1,6,2) // ==> (1, 3, 5)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
19 * -----
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
20 */
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
21
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
22 template Sequence(int max)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
23 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
24 static if( max <= 0 )
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
25 alias TypeTuple!() Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
26 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
27 alias TypeTuple!(Sequence!(max-1), max-1) Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
28 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
29
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
30 /// ditto
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
31
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
32 template Sequence(int min, int max)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
33 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
34 static if( max <= min )
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
35 alias TypeTuple!() Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
36 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
37 alias TypeTuple!(Sequence!(min, max-1), max-1) Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
38 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
39
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
40 /// ditto
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
41
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
42 template Sequence(int min, int max, int stride)
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
43 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
44 static if( min >= max )
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
45 alias TypeTuple!() Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
46 else
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
47 alias TypeTuple!(min, Sequence!(min+stride, max, stride)) Sequence;
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
48 }
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
49
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
50 version( Unittest )
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
51 {
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
52 static assert( Sequence!(3)[0] == 0 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
53 static assert( Sequence!(3)[1] == 1 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
54 static assert( Sequence!(3)[2] == 2 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
55 static assert( Sequence!(3).length == 3 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
56
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
57 static assert( Sequence!(1, 3)[0] == 1 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
58 static assert( Sequence!(1, 3)[1] == 2 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
59 static assert( Sequence!(1, 3).length == 2 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
60
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
61 static assert( Sequence!(1, 5, 2)[0] == 1 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
62 static assert( Sequence!(1, 5, 2)[1] == 3 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
63 static assert( Sequence!(1, 5, 2).length == 2 );
f9559a957be9 new signals and slots implementation
eldar
parents:
diff changeset
64 }