annotate lphobos/typeinfo2/ti_Aint.d @ 853:82ad6c0c601c

Add Elrood's patch to output LDC and LLVM source revs.
author Christian Kamm <kamm incasoftware de>
date Sun, 14 Dec 2008 16:51:36 +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_Aint;
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 // int[]
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
6
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
7 class TypeInfo_Ai : 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 "int[]"; }
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 { int[] s = *cast(int[]*)p;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
13 auto 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;
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 int[] s1 = *cast(int[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
31 int[] s2 = *cast(int[]*)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 * int.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 int[] s1 = *cast(int[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
40 int[] s2 = *cast(int[]*)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 int result = s1[u] - s2[u];
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
48 if (result)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
49 return result;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
50 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
51 return cast(int)s1.length - cast(int)s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
52 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
53
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
54 size_t tsize()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
55 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
56 return (int[]).sizeof;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
57 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
58
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
59 uint flags()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
60 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
61 return 1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
62 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
63
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
64 TypeInfo next()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
65 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
66 return typeid(int);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
67 }
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 // uint[]
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
71
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
72 class TypeInfo_Ak : TypeInfo_Ai
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
73 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
74 char[] toString() { return "uint[]"; }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
75
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
76 int compare(void *p1, void *p2)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
77 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
78 uint[] s1 = *cast(uint[]*)p1;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
79 uint[] s2 = *cast(uint[]*)p2;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
80 size_t len = s1.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
81
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
82 if (s2.length < len)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
83 len = s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
84 for (size_t u = 0; u < len; u++)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
85 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
86 int result = s1[u] - s2[u];
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
87 if (result)
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
88 return result;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
89 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
90 return cast(int)s1.length - cast(int)s2.length;
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
91 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
92
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
93 TypeInfo next()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
94 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
95 return typeid(uint);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
96 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
97 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
98
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
99 // dchar[]
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
100
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
101 class TypeInfo_Aw : TypeInfo_Ak
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
102 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
103 char[] toString() { return "dchar[]"; }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
104
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
105 TypeInfo next()
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
106 {
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
107 return typeid(dchar);
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
108 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
109 }
362825278842 [svn r63] Forgot lphobos/typeinfo2
lindquist
parents:
diff changeset
110