59
|
1 module typeinfo2.ti_Aint;
|
|
2
|
|
3 extern(C) int memcmp(void*,void*,size_t);
|
|
4
|
|
5 // int[]
|
|
6
|
|
7 class TypeInfo_Ai : TypeInfo
|
|
8 {
|
|
9 char[] toString() { return "int[]"; }
|
|
10
|
|
11 hash_t getHash(void *p)
|
|
12 { int[] s = *cast(int[]*)p;
|
|
13 auto len = s.length;
|
|
14 auto str = s.ptr;
|
|
15 hash_t hash = 0;
|
|
16
|
|
17 while (len)
|
|
18 {
|
|
19 hash *= 9;
|
|
20 hash += *cast(uint *)str;
|
|
21 str++;
|
|
22 len--;
|
|
23 }
|
|
24
|
|
25 return hash;
|
|
26 }
|
|
27
|
|
28 int equals(void *p1, void *p2)
|
|
29 {
|
|
30 int[] s1 = *cast(int[]*)p1;
|
|
31 int[] s2 = *cast(int[]*)p2;
|
|
32
|
|
33 return s1.length == s2.length &&
|
|
34 memcmp(cast(void *)s1, cast(void *)s2, s1.length * int.sizeof) == 0;
|
|
35 }
|
|
36
|
|
37 int compare(void *p1, void *p2)
|
|
38 {
|
|
39 int[] s1 = *cast(int[]*)p1;
|
|
40 int[] s2 = *cast(int[]*)p2;
|
|
41 size_t len = s1.length;
|
|
42
|
|
43 if (s2.length < len)
|
|
44 len = s2.length;
|
|
45 for (size_t u = 0; u < len; u++)
|
|
46 {
|
|
47 int result = s1[u] - s2[u];
|
|
48 if (result)
|
|
49 return result;
|
|
50 }
|
|
51 return cast(int)s1.length - cast(int)s2.length;
|
|
52 }
|
|
53
|
|
54 size_t tsize()
|
|
55 {
|
|
56 return (int[]).sizeof;
|
|
57 }
|
|
58
|
|
59 uint flags()
|
|
60 {
|
|
61 return 1;
|
|
62 }
|
|
63
|
|
64 TypeInfo next()
|
|
65 {
|
|
66 return typeid(int);
|
|
67 }
|
|
68 }
|
|
69
|
|
70 // uint[]
|
|
71
|
|
72 class TypeInfo_Ak : TypeInfo_Ai
|
|
73 {
|
|
74 char[] toString() { return "uint[]"; }
|
|
75
|
|
76 int compare(void *p1, void *p2)
|
|
77 {
|
|
78 uint[] s1 = *cast(uint[]*)p1;
|
|
79 uint[] s2 = *cast(uint[]*)p2;
|
|
80 size_t len = s1.length;
|
|
81
|
|
82 if (s2.length < len)
|
|
83 len = s2.length;
|
|
84 for (size_t u = 0; u < len; u++)
|
|
85 {
|
|
86 int result = s1[u] - s2[u];
|
|
87 if (result)
|
|
88 return result;
|
|
89 }
|
|
90 return cast(int)s1.length - cast(int)s2.length;
|
|
91 }
|
|
92
|
|
93 TypeInfo next()
|
|
94 {
|
|
95 return typeid(uint);
|
|
96 }
|
|
97 }
|
|
98
|
|
99 // dchar[]
|
|
100
|
|
101 class TypeInfo_Aw : TypeInfo_Ak
|
|
102 {
|
|
103 char[] toString() { return "dchar[]"; }
|
|
104
|
|
105 TypeInfo next()
|
|
106 {
|
|
107 return typeid(dchar);
|
|
108 }
|
|
109 }
|
|
110
|