annotate lphobos/typeinfo2/ti_Adouble.d @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents b86e00b938a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
1 /*
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
2 * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
3 * Written by Walter Bright
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
4 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
5 * This software is provided 'as-is', without any express or implied
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
6 * warranty. In no event will the authors be held liable for any damages
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
7 * arising from the use of this software.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
8 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
9 * Permission is granted to anyone to use this software for any purpose,
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
10 * including commercial applications, and to alter it and redistribute it
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
11 * freely, in both source and binary form, subject to the following
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
12 * restrictions:
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
13 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
14 * o The origin of this software must not be misrepresented; you must not
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
15 * claim that you wrote the original software. If you use this software
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
16 * in a product, an acknowledgment in the product documentation would be
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
17 * appreciated but is not required.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
18 * o Altered source versions must be plainly marked as such, and must not
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
19 * be misrepresented as being the original software.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
20 * o This notice may not be removed or altered from any source
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
21 * distribution.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
22 */
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
23
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
24 module typeinfo2.ti_Adouble;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
25
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
26 private import typeinfo1.ti_double;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
27
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
28 // double[]
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
29
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
30 class TypeInfo_Ad : TypeInfo
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
31 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
32 char[] toString() { return "double[]"; }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
33
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
34 hash_t getHash(void *p)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
35 { double[] s = *cast(double[]*)p;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
36 size_t len = s.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
37 auto str = s.ptr;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
38 hash_t hash = 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
39
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
40 while (len)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
41 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
42 hash *= 9;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
43 hash += (cast(uint *)str)[0];
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
44 hash += (cast(uint *)str)[1];
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
45 str++;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
46 len--;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
47 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
48
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
49 return hash;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
50 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
51
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
52 int equals(void *p1, void *p2)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
53 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
54 double[] s1 = *cast(double[]*)p1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
55 double[] s2 = *cast(double[]*)p2;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
56 size_t len = s1.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
57
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
58 if (len != s2.length)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
59 return 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
60 for (size_t u = 0; u < len; u++)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
61 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
62 int c = TypeInfo_d._equals(s1[u], s2[u]);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
63 if (c == 0)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
64 return 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
65 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
66 return 1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
67 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
68
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
69 int compare(void *p1, void *p2)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
70 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
71 double[] s1 = *cast(double[]*)p1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
72 double[] s2 = *cast(double[]*)p2;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
73 size_t len = s1.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
74
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
75 if (s2.length < len)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
76 len = s2.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
77 for (size_t u = 0; u < len; u++)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
78 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
79 int c = TypeInfo_d._compare(s1[u], s2[u]);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
80 if (c)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
81 return c;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
82 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
83 return cast(int)s1.length - cast(int)s2.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
84 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
85
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
86 size_t tsize()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
87 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
88 return (double[]).sizeof;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
89 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
90
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
91 uint flags()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
92 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
93 return 1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
94 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
95
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
96 TypeInfo next()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
97 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
98 return typeid(double);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
99 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
100 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
101
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
102 // idouble[]
62
b86e00b938a5 [svn r66] Added support for imaginary floating point types
lindquist
parents: 61
diff changeset
103
61
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
104 class TypeInfo_Ap : TypeInfo_Ad
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
105 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
106 char[] toString() { return "idouble[]"; }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
107
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
108 TypeInfo next()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
109 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
110 return typeid(idouble);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
111 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
112 }