comparison lphobos/std/typeinfo/ti_Aint.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children
comparison
equal deleted inserted replaced
0:a9e71648e74d 1:c53b6e3fe49a
1
2 module std.typeinfo.ti_Aint;
3
4 private import std.c.string;
5
6 // int[]
7
8 class TypeInfo_Ai : TypeInfo
9 {
10 char[] toString() { return "int[]"; }
11
12 hash_t getHash(void *p)
13 { int[] s = *cast(int[]*)p;
14 auto 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;
22 str++;
23 len--;
24 }
25
26 return hash;
27 }
28
29 int equals(void *p1, void *p2)
30 {
31 int[] s1 = *cast(int[]*)p1;
32 int[] s2 = *cast(int[]*)p2;
33
34 return s1.length == s2.length &&
35 memcmp(cast(void *)s1, cast(void *)s2, s1.length * int.sizeof) == 0;
36 }
37
38 int compare(void *p1, void *p2)
39 {
40 int[] s1 = *cast(int[]*)p1;
41 int[] s2 = *cast(int[]*)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 int result = s1[u] - s2[u];
49 if (result)
50 return result;
51 }
52 return cast(int)s1.length - cast(int)s2.length;
53 }
54
55 size_t tsize()
56 {
57 return (int[]).sizeof;
58 }
59
60 uint flags()
61 {
62 return 1;
63 }
64
65 TypeInfo next()
66 {
67 return typeid(int);
68 }
69 }
70
71 // uint[]
72
73 class TypeInfo_Ak : TypeInfo_Ai
74 {
75 char[] toString() { return "uint[]"; }
76
77 int compare(void *p1, void *p2)
78 {
79 uint[] s1 = *cast(uint[]*)p1;
80 uint[] s2 = *cast(uint[]*)p2;
81 size_t len = s1.length;
82
83 if (s2.length < len)
84 len = s2.length;
85 for (size_t u = 0; u < len; u++)
86 {
87 int result = s1[u] - s2[u];
88 if (result)
89 return result;
90 }
91 return cast(int)s1.length - cast(int)s2.length;
92 }
93
94 TypeInfo next()
95 {
96 return typeid(uint);
97 }
98 }
99
100 // dchar[]
101
102 class TypeInfo_Aw : TypeInfo_Ak
103 {
104 char[] toString() { return "dchar[]"; }
105
106 TypeInfo next()
107 {
108 return typeid(dchar);
109 }
110 }
111