comparison 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
comparison
equal deleted inserted replaced
287:b6984b290e46 288:f9559a957be9
1 /**
2 * Tuple-related stuff.
3 *
4 * Authors: Daniel Keep <daniel.keep@gmail.com>
5 * Copyright: See LICENSE.
6 */
7 module qt.qtd.util.Tuple;
8
9 import std.typetuple;
10
11 /**
12 * Sequence can be used to generate a tuple of integer values. It can be
13 * used in one of three forms:
14 *
15 * -----
16 * Sequence!(6) // ==> (0, 1, 2, 3, 4, 5)
17 * Sequence!(1,6) // ==> (1, 2, 3, 4, 5)
18 * Sequence!(1,6,2) // ==> (1, 3, 5)
19 * -----
20 */
21
22 template Sequence(int max)
23 {
24 static if( max <= 0 )
25 alias TypeTuple!() Sequence;
26 else
27 alias TypeTuple!(Sequence!(max-1), max-1) Sequence;
28 }
29
30 /// ditto
31
32 template Sequence(int min, int max)
33 {
34 static if( max <= min )
35 alias TypeTuple!() Sequence;
36 else
37 alias TypeTuple!(Sequence!(min, max-1), max-1) Sequence;
38 }
39
40 /// ditto
41
42 template Sequence(int min, int max, int stride)
43 {
44 static if( min >= max )
45 alias TypeTuple!() Sequence;
46 else
47 alias TypeTuple!(min, Sequence!(min+stride, max, stride)) Sequence;
48 }
49
50 version( Unittest )
51 {
52 static assert( Sequence!(3)[0] == 0 );
53 static assert( Sequence!(3)[1] == 1 );
54 static assert( Sequence!(3)[2] == 2 );
55 static assert( Sequence!(3).length == 3 );
56
57 static assert( Sequence!(1, 3)[0] == 1 );
58 static assert( Sequence!(1, 3)[1] == 2 );
59 static assert( Sequence!(1, 3).length == 2 );
60
61 static assert( Sequence!(1, 5, 2)[0] == 1 );
62 static assert( Sequence!(1, 5, 2)[1] == 3 );
63 static assert( Sequence!(1, 5, 2).length == 2 );
64 }