Mercurial > projects > qtd
annotate d2/qtd/Array.d @ 350:31520b2c0b3c
Removed dependency on parent trait and stringof
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Thu, 20 May 2010 15:49:08 +0300 |
parents | 96a75b1e5b26 |
children | 9784459f0750 |
rev | line source |
---|---|
1 | 1 /** |
2 * | |
3 * Copyright: Copyright QtD Team, 2008-2009 | |
4 * Authors: Max Samukha | |
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a> | |
6 * | |
7 * Copyright QtD Team, 2008-2009 | |
8 * Distributed under the Boost Software License, Version 1.0. | |
9 * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
10 * | |
11 */ | |
344 | 12 module qtd.Array; |
1 | 13 |
14 version (Tango) | |
15 import tango.stdc.string; | |
16 else | |
17 import core.stdc.string; | |
18 | |
19 void remove(T)(ref T[] haystack, T needle) | |
20 { | |
21 foreach (i, e; haystack) | |
22 { | |
23 if (e == needle) | |
24 { | |
25 if (haystack.length > 1) | |
26 { | |
27 i++; | |
28 memmove(haystack.ptr + i - 1, haystack.ptr + i, (haystack.length - i) * T.sizeof); | |
29 haystack.length = haystack.length - 1; | |
30 } | |
31 else | |
32 haystack.length = 0; | |
33 | |
34 break; | |
35 } | |
36 } | |
344 | 37 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
38 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
39 /** |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
40 Allocates a dynamic array at compile time. |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
41 */ |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
42 T[] newArray(T)(size_t len, T[] from = []) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
43 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
44 if (len == from.length) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
45 return from; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
46 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
47 if (!from.length) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
48 from = [T.init]; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
49 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
50 if (from.length < len) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
51 return newArray!T(len, from ~ from); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
52 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
53 return from[0..len]; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
54 } |