comparison lphobos/typeinfo2/ti_Along.d @ 59:362825278842 trunk

[svn r63] Forgot lphobos/typeinfo2
author lindquist
date Thu, 25 Oct 2007 09:04:00 +0200
parents
children
comparison
equal deleted inserted replaced
58:2c3cd3596187 59:362825278842
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