59
|
1 module typeinfo2.ti_Along;
|
|
2
|
|
3 extern(C) int memcmp(void*,void*,size_t);
|
|
4
|
|
5 // long[]
|
|
6
|
|
7 class TypeInfo_Al : TypeInfo
|
|
8 {
|
|
9 char[] toString() { return "long[]"; }
|
|
10
|
|
11 hash_t getHash(void *p)
|
|
12 { long[] s = *cast(long[]*)p;
|
|
13 size_t 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 + *(cast(uint *)str + 1);
|
|
21 str++;
|
|
22 len--;
|
|
23 }
|
|
24
|
|
25 return hash;
|
|
26 }
|
|
27
|
|
28 int equals(void *p1, void *p2)
|
|
29 {
|
|
30 long[] s1 = *cast(long[]*)p1;
|
|
31 long[] s2 = *cast(long[]*)p2;
|
|
32
|
|
33 return s1.length == s2.length &&
|
|
34 memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0;
|
|
35 }
|
|
36
|
|
37 int compare(void *p1, void *p2)
|
|
38 {
|
|
39 long[] s1 = *cast(long[]*)p1;
|
|
40 long[] s2 = *cast(long[]*)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 if (s1[u] < s2[u])
|
|
48 return -1;
|
|
49 else if (s1[u] > s2[u])
|
|
50 return 1;
|
|
51 }
|
|
52 return cast(int)s1.length - cast(int)s2.length;
|
|
53 }
|
|
54
|
|
55 size_t tsize()
|
|
56 {
|
|
57 return (long[]).sizeof;
|
|
58 }
|
|
59
|
|
60 uint flags()
|
|
61 {
|
|
62 return 1;
|
|
63 }
|
|
64
|
|
65 TypeInfo next()
|
|
66 {
|
|
67 return typeid(long);
|
|
68 }
|
|
69 }
|
|
70
|
|
71
|
|
72 // ulong[]
|
|
73
|
|
74 class TypeInfo_Am : TypeInfo_Al
|
|
75 {
|
|
76 char[] toString() { return "ulong[]"; }
|
|
77
|
|
78 int compare(void *p1, void *p2)
|
|
79 {
|
|
80 ulong[] s1 = *cast(ulong[]*)p1;
|
|
81 ulong[] s2 = *cast(ulong[]*)p2;
|
|
82 size_t len = s1.length;
|
|
83
|
|
84 if (s2.length < len)
|
|
85 len = s2.length;
|
|
86 for (size_t u = 0; u < len; u++)
|
|
87 {
|
|
88 if (s1[u] < s2[u])
|
|
89 return -1;
|
|
90 else if (s1[u] > s2[u])
|
|
91 return 1;
|
|
92 }
|
|
93 return cast(int)s1.length - cast(int)s2.length;
|
|
94 }
|
|
95
|
|
96 TypeInfo next()
|
|
97 {
|
|
98 return typeid(ulong);
|
|
99 }
|
|
100 }
|
|
101
|
|
102
|