comparison runtime/internal/typeinfo/ti_AC.d @ 443:44f08170f4ef

Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn. Reworked the LLVMDC specific pragmas.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Fri, 01 Aug 2008 00:32:06 +0200
parents
children
comparison
equal deleted inserted replaced
442:76078c8ab5b9 443:44f08170f4ef
1 module typeinfo.ti_AC;
2
3 // Object[]
4
5 class TypeInfo_AC : TypeInfo_Array
6 {
7 hash_t getHash(void *p)
8 { Object[] s = *cast(Object[]*)p;
9 hash_t hash = 0;
10
11 foreach (Object o; s)
12 {
13 if (o)
14 hash += o.toHash();
15 }
16 return hash;
17 }
18
19 int equals(void *p1, void *p2)
20 {
21 Object[] s1 = *cast(Object[]*)p1;
22 Object[] s2 = *cast(Object[]*)p2;
23
24 if (s1.length == s2.length)
25 {
26 for (size_t u = 0; u < s1.length; u++)
27 { Object o1 = s1[u];
28 Object o2 = s2[u];
29
30 // Do not pass null's to Object.opEquals()
31 if (o1 is o2 ||
32 (!(o1 is null) && !(o2 is null) && o1.opEquals(o2)))
33 continue;
34 return 0;
35 }
36 return 1;
37 }
38 return 0;
39 }
40
41 int compare(void *p1, void *p2)
42 {
43 Object[] s1 = *cast(Object[]*)p1;
44 Object[] s2 = *cast(Object[]*)p2;
45 ptrdiff_t c;
46
47 c = cast(ptrdiff_t)s1.length - cast(ptrdiff_t)s2.length;
48 if (c == 0)
49 {
50 for (size_t u = 0; u < s1.length; u++)
51 { Object o1 = s1[u];
52 Object o2 = s2[u];
53
54 if (o1 is o2)
55 continue;
56
57 // Regard null references as always being "less than"
58 if (o1)
59 {
60 if (!o2)
61 { c = 1;
62 break;
63 }
64 c = o1.opCmp(o2);
65 if (c)
66 break;
67 }
68 else
69 { c = -1;
70 break;
71 }
72 }
73 }
74 if (c < 0)
75 c = -1;
76 else
77 c = 1;
78 return cast(int)c;
79 }
80
81 size_t tsize()
82 {
83 return (Object[]).sizeof;
84 }
85
86 uint flags()
87 {
88 return 1;
89 }
90
91 TypeInfo next()
92 {
93 return typeid(Object);
94 }
95 }