comparison druntime/src/compiler/ldc/typeinfo/ti_Ashort.d @ 759:d3eb054172f9

Added copy of druntime from DMD 2.020 modified for LDC.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 11 Nov 2008 01:52:37 +0100
parents
children
comparison
equal deleted inserted replaced
758:f04dde6e882c 759:d3eb054172f9
1
2 module rt.typeinfo.ti_Ashort;
3
4 private import stdc.string;
5
6 // short[]
7
8 class TypeInfo_As : TypeInfo
9 {
10 override string toString() { return "short[]"; }
11
12 override hash_t getHash(in void* p)
13 { short[] s = *cast(short[]*)p;
14 size_t len = s.length;
15 short *str = s.ptr;
16 hash_t hash = 0;
17
18 while (1)
19 {
20 switch (len)
21 {
22 case 0:
23 return hash;
24
25 case 1:
26 hash *= 9;
27 hash += *cast(ushort *)str;
28 return hash;
29
30 default:
31 hash *= 9;
32 hash += *cast(uint *)str;
33 str += 2;
34 len -= 2;
35 break;
36 }
37 }
38
39 return hash;
40 }
41
42 override equals_t equals(in void* p1, in void* p2)
43 {
44 short[] s1 = *cast(short[]*)p1;
45 short[] s2 = *cast(short[]*)p2;
46
47 return s1.length == s2.length &&
48 memcmp(cast(void *)s1, cast(void *)s2, s1.length * short.sizeof) == 0;
49 }
50
51 override int compare(in void* p1, in void* p2)
52 {
53 short[] s1 = *cast(short[]*)p1;
54 short[] s2 = *cast(short[]*)p2;
55 size_t len = s1.length;
56
57 if (s2.length < len)
58 len = s2.length;
59 for (size_t u = 0; u < len; u++)
60 {
61 int result = s1[u] - s2[u];
62 if (result)
63 return result;
64 }
65 if (s1.length < s2.length)
66 return -1;
67 else if (s1.length > s2.length)
68 return 1;
69 return 0;
70 }
71
72 override size_t tsize()
73 {
74 return (short[]).sizeof;
75 }
76
77 override uint flags()
78 {
79 return 1;
80 }
81
82 override TypeInfo next()
83 {
84 return typeid(short);
85 }
86 }
87
88
89 // ushort[]
90
91 class TypeInfo_At : TypeInfo_As
92 {
93 override string toString() { return "ushort[]"; }
94
95 override int compare(in void* p1, in void* p2)
96 {
97 ushort[] s1 = *cast(ushort[]*)p1;
98 ushort[] s2 = *cast(ushort[]*)p2;
99 size_t len = s1.length;
100
101 if (s2.length < len)
102 len = s2.length;
103 for (size_t u = 0; u < len; u++)
104 {
105 int result = s1[u] - s2[u];
106 if (result)
107 return result;
108 }
109 if (s1.length < s2.length)
110 return -1;
111 else if (s1.length > s2.length)
112 return 1;
113 return 0;
114 }
115
116 override TypeInfo next()
117 {
118 return typeid(ushort);
119 }
120 }
121
122 // wchar[]
123
124 class TypeInfo_Au : TypeInfo_At
125 {
126 override string toString() { return "wchar[]"; }
127
128 override TypeInfo next()
129 {
130 return typeid(wchar);
131 }
132 }