annotate lphobos/typeinfo2/ti_Along.d @ 883:b52d5de7783f

GC defines and linkage changes.
author Christian Kamm <kamm incasoftware de>
date Thu, 08 Jan 2009 18:20:02 +0100
parents 362825278842
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
1 module typeinfo2.ti_Along;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
2
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
3 extern(C) int memcmp(void*,void*,size_t);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
4
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
5 // long[]
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
6
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
7 class TypeInfo_Al : TypeInfo
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
8 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
9 char[] toString() { return "long[]"; }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
10
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
11 hash_t getHash(void *p)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
12 { long[] s = *cast(long[]*)p;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
13 size_t len = s.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
14 auto str = s.ptr;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
15 hash_t hash = 0;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
16
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
17 while (len)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
18 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
19 hash *= 9;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
20 hash += *cast(uint *)str + *(cast(uint *)str + 1);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
21 str++;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
22 len--;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
23 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
24
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
25 return hash;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
26 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
27
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
28 int equals(void *p1, void *p2)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
29 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
30 long[] s1 = *cast(long[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
31 long[] s2 = *cast(long[]*)p2;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
32
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
33 return s1.length == s2.length &&
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
34 memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
35 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
36
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
37 int compare(void *p1, void *p2)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
38 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
39 long[] s1 = *cast(long[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
40 long[] s2 = *cast(long[]*)p2;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
41 size_t len = s1.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
42
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
43 if (s2.length < len)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
44 len = s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
45 for (size_t u = 0; u < len; u++)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
46 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
47 if (s1[u] < s2[u])
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
48 return -1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
49 else if (s1[u] > s2[u])
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
50 return 1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
51 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
52 return cast(int)s1.length - cast(int)s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
53 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
54
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
55 size_t tsize()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
56 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
57 return (long[]).sizeof;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
58 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
59
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
60 uint flags()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
61 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
62 return 1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
63 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
64
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
65 TypeInfo next()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
66 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
67 return typeid(long);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
68 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
69 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
70
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
71
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
72 // ulong[]
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
73
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
74 class TypeInfo_Am : TypeInfo_Al
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
75 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
76 char[] toString() { return "ulong[]"; }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
77
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
78 int compare(void *p1, void *p2)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
79 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
80 ulong[] s1 = *cast(ulong[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
81 ulong[] s2 = *cast(ulong[]*)p2;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
82 size_t len = s1.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
83
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
84 if (s2.length < len)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
85 len = s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
86 for (size_t u = 0; u < len; u++)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
87 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
88 if (s1[u] < s2[u])
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
89 return -1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
90 else if (s1[u] > s2[u])
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
91 return 1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
92 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
93 return cast(int)s1.length - cast(int)s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
94 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
95
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
96 TypeInfo next()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
97 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
98 return typeid(ulong);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
99 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
100 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
101
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
102