comparison druntime/src/compiler/ldc/typeinfo/ti_Along.d @ 1458:e0b2d67cfe7c

Added druntime (this should be removed once it works).
author Robert Clipsham <robert@octarineparrot.com>
date Tue, 02 Jun 2009 17:43:06 +0100
parents
children
comparison
equal deleted inserted replaced
1456:7b218ec1044f 1458:e0b2d67cfe7c
1 /**
2 * TypeInfo support code.
3 *
4 * Copyright: Copyright Digital Mars 2004 - 2009.
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>.
6 * Authors: Walter Bright
7 *
8 * Copyright Digital Mars 2004 - 2009.
9 * Distributed under the Boost Software License, Version 1.0.
10 * (See accompanying file LICENSE_1_0.txt or copy at
11 * http://www.boost.org/LICENSE_1_0.txt)
12 */
13 module rt.typeinfo.ti_Along;
14
15 private import core.stdc.string;
16
17 // long[]
18
19 class TypeInfo_Al : TypeInfo
20 {
21 override string toString() { return "long[]"; }
22
23 override hash_t getHash(in void* p)
24 { long[] s = *cast(long[]*)p;
25 size_t len = s.length;
26 auto str = s.ptr;
27 hash_t hash = 0;
28
29 while (len)
30 {
31 hash *= 9;
32 hash += *cast(uint *)str + *(cast(uint *)str + 1);
33 str++;
34 len--;
35 }
36
37 return hash;
38 }
39
40 override equals_t equals(in void* p1, in void* p2)
41 {
42 long[] s1 = *cast(long[]*)p1;
43 long[] s2 = *cast(long[]*)p2;
44
45 return s1.length == s2.length &&
46 memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0;
47 }
48
49 override int compare(in void* p1, in void* p2)
50 {
51 long[] s1 = *cast(long[]*)p1;
52 long[] s2 = *cast(long[]*)p2;
53 size_t len = s1.length;
54
55 if (s2.length < len)
56 len = s2.length;
57 for (size_t u = 0; u < len; u++)
58 {
59 if (s1[u] < s2[u])
60 return -1;
61 else if (s1[u] > s2[u])
62 return 1;
63 }
64 if (s1.length < s2.length)
65 return -1;
66 else if (s1.length > s2.length)
67 return 1;
68 return 0;
69 }
70
71 override size_t tsize()
72 {
73 return (long[]).sizeof;
74 }
75
76 override uint flags()
77 {
78 return 1;
79 }
80
81 override TypeInfo next()
82 {
83 return typeid(long);
84 }
85 }
86
87
88 // ulong[]
89
90 class TypeInfo_Am : TypeInfo_Al
91 {
92 override string toString() { return "ulong[]"; }
93
94 override int compare(in void* p1, in void* p2)
95 {
96 ulong[] s1 = *cast(ulong[]*)p1;
97 ulong[] s2 = *cast(ulong[]*)p2;
98 size_t len = s1.length;
99
100 if (s2.length < len)
101 len = s2.length;
102 for (size_t u = 0; u < len; u++)
103 {
104 if (s1[u] < s2[u])
105 return -1;
106 else if (s1[u] > s2[u])
107 return 1;
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(ulong);
119 }
120 }