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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /**
e78566595089 initial import
mandel
parents:
diff changeset
2 *
e78566595089 initial import
mandel
parents:
diff changeset
3 * Copyright: Copyright QtD Team, 2008-2009
e78566595089 initial import
mandel
parents:
diff changeset
4 * Authors: Max Samukha
e78566595089 initial import
mandel
parents:
diff changeset
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>
e78566595089 initial import
mandel
parents:
diff changeset
6 *
e78566595089 initial import
mandel
parents:
diff changeset
7 * Copyright QtD Team, 2008-2009
e78566595089 initial import
mandel
parents:
diff changeset
8 * Distributed under the Boost Software License, Version 1.0.
e78566595089 initial import
mandel
parents:
diff changeset
9 * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
e78566595089 initial import
mandel
parents:
diff changeset
10 *
e78566595089 initial import
mandel
parents:
diff changeset
11 */
344
96a75b1e5b26 project structure changes
Max Samukha <maxter@spambox.com>
parents: 1
diff changeset
12 module qtd.Array;
1
e78566595089 initial import
mandel
parents:
diff changeset
13
e78566595089 initial import
mandel
parents:
diff changeset
14 version (Tango)
e78566595089 initial import
mandel
parents:
diff changeset
15 import tango.stdc.string;
e78566595089 initial import
mandel
parents:
diff changeset
16 else
e78566595089 initial import
mandel
parents:
diff changeset
17 import core.stdc.string;
e78566595089 initial import
mandel
parents:
diff changeset
18
e78566595089 initial import
mandel
parents:
diff changeset
19 void remove(T)(ref T[] haystack, T needle)
e78566595089 initial import
mandel
parents:
diff changeset
20 {
e78566595089 initial import
mandel
parents:
diff changeset
21 foreach (i, e; haystack)
e78566595089 initial import
mandel
parents:
diff changeset
22 {
e78566595089 initial import
mandel
parents:
diff changeset
23 if (e == needle)
e78566595089 initial import
mandel
parents:
diff changeset
24 {
e78566595089 initial import
mandel
parents:
diff changeset
25 if (haystack.length > 1)
e78566595089 initial import
mandel
parents:
diff changeset
26 {
e78566595089 initial import
mandel
parents:
diff changeset
27 i++;
e78566595089 initial import
mandel
parents:
diff changeset
28 memmove(haystack.ptr + i - 1, haystack.ptr + i, (haystack.length - i) * T.sizeof);
e78566595089 initial import
mandel
parents:
diff changeset
29 haystack.length = haystack.length - 1;
e78566595089 initial import
mandel
parents:
diff changeset
30 }
e78566595089 initial import
mandel
parents:
diff changeset
31 else
e78566595089 initial import
mandel
parents:
diff changeset
32 haystack.length = 0;
e78566595089 initial import
mandel
parents:
diff changeset
33
e78566595089 initial import
mandel
parents:
diff changeset
34 break;
e78566595089 initial import
mandel
parents:
diff changeset
35 }
e78566595089 initial import
mandel
parents:
diff changeset
36 }
344
96a75b1e5b26 project structure changes
Max Samukha <maxter@spambox.com>
parents: 1
diff changeset
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 }