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.compiler.gdc.typeinfo.ti_C;
25 
26 // Object
27 
28 class TypeInfo_C : TypeInfo
29 {
30     override hash_t getHash(in void* p)
31     {
32         Object o = *cast(Object*)p;
33         return o ? o.toHash() : cast(hash_t)0xdeadbeef;
34     }
35 
36     override equals_t equals(in void* p1, in void* p2)
37     {
38         Object o1 = *cast(Object*)p1;
39         Object o2 = *cast(Object*)p2;
40 
41         return o1 == o2;
42     }
43 
44     override int compare(in void* p1, in void* p2)
45     {
46         Object o1 = *cast(Object*)p1;
47         Object o2 = *cast(Object*)p2;
48         int c = 0;
49 
50         // Regard null references as always being "less than"
51         if (!(o1 is o2))
52         {
53             if (o1)
54             {   if (!o2)
55                     c = 1;
56                 else
57                     c = o1.opCmp(o2);
58             }
59             else
60                 c = -1;
61         }
62         return c;
63     }
64 
65     override size_t talign()
66     {
67         return Object.alignof;
68     }
69 
70     override size_t tsize()
71     {
72         return Object.sizeof;
73     }
74 
75     override uint flags()
76     {
77         return 1;
78     }
79 }