]> git.llucax.com Git - software/druntime.git/blob - src/compiler/dmd/typeinfo/ti_Afloat.d
49625d9a3b1899f5a96a83587bae410373207691
[software/druntime.git] / src / compiler / dmd / typeinfo / ti_Afloat.d
1 /*
2  *  Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
3  *  Written by Walter Bright
4  *
5  *  This software is provided 'as-is', without any express or implied
6  *  warranty. In no event will the authors be held liable for any damages
7  *  arising from the use of this software.
8  *
9  *  Permission is granted to anyone to use this software for any purpose,
10  *  including commercial applications, and to alter it and redistribute it
11  *  freely, in both source and binary form, subject to the following
12  *  restrictions:
13  *
14  *  o  The origin of this software must not be misrepresented; you must not
15  *     claim that you wrote the original software. If you use this software
16  *     in a product, an acknowledgment in the product documentation would be
17  *     appreciated but is not required.
18  *  o  Altered source versions must be plainly marked as such, and must not
19  *     be misrepresented as being the original software.
20  *  o  This notice may not be removed or altered from any source
21  *     distribution.
22  */
23
24 module rt.typeinfo.ti_Afloat;
25
26 private import typeinfo.ti_float;
27
28 // float[]
29
30 class TypeInfo_Af : TypeInfo
31 {
32     string toString() { return "float[]"; }
33
34     hash_t getHash(in void* p)
35     {   float[] s = *cast(float[]*)p;
36         size_t len = s.length;
37         auto str = s.ptr;
38         hash_t hash = 0;
39
40         while (len)
41         {
42             hash *= 9;
43             hash += *cast(uint *)str;
44             str++;
45             len--;
46         }
47
48         return hash;
49     }
50
51     equals_t equals(in void* p1, in void* p2)
52     {
53         float[] s1 = *cast(float[]*)p1;
54         float[] s2 = *cast(float[]*)p2;
55         size_t len = s1.length;
56
57         if (len != s2.length)
58             return 0;
59         for (size_t u = 0; u < len; u++)
60         {
61             int c = TypeInfo_f._equals(s1[u], s2[u]);
62             if (c == 0)
63                 return 0;
64         }
65         return 1;
66     }
67
68     int compare(in void* p1, in void* p2)
69     {
70         float[] s1 = *cast(float[]*)p1;
71         float[] s2 = *cast(float[]*)p2;
72         size_t len = s1.length;
73
74         if (s2.length < len)
75             len = s2.length;
76         for (size_t u = 0; u < len; u++)
77         {
78             int c = TypeInfo_f._compare(s1[u], s2[u]);
79             if (c)
80                 return c;
81         }
82         if (s1.length < s2.length)
83             return -1;
84         else if (s1.length > s2.length)
85             return 1;
86         return 0;
87     }
88
89     size_t tsize()
90     {
91         return (float[]).sizeof;
92     }
93
94     uint flags()
95     {
96         return 1;
97     }
98
99     TypeInfo next()
100     {
101         return typeid(float);
102     }
103 }
104
105 // ifloat[]
106
107 class TypeInfo_Ao : TypeInfo_Af
108 {
109     string toString() { return "ifloat[]"; }
110
111     TypeInfo next()
112     {
113         return typeid(ifloat);
114     }
115 }