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