xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/libdruntime/rt/typeinfo/ti_C.d (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1 /**
2  * TypeInfo support code.
3  *
4  * Copyright: Copyright Digital Mars 2004 - 2009.
5  * License:   $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6  * Authors:   Walter Bright
7  */
8 
9 /*          Copyright Digital Mars 2004 - 2009.
10  * Distributed under the Boost Software License, Version 1.0.
11  *    (See accompanying file LICENSE or copy at
12  *          http://www.boost.org/LICENSE_1_0.txt)
13  */
14 module rt.typeinfo.ti_C;
15 
16 // Object
17 
18 class TypeInfo_C : TypeInfo
19 {
20     @trusted:
21     const:
22     //pure:
23     //nothrow:
24 
getHash(scope const void * p)25     override size_t getHash(scope const void* p)
26     {
27         Object o = *cast(Object*)p;
28         return o ? o.toHash() : 0;
29     }
30 
equals(in void * p1,in void * p2)31     override bool equals(in void* p1, in void* p2)
32     {
33         Object o1 = *cast(Object*)p1;
34         Object o2 = *cast(Object*)p2;
35 
36         return o1 == o2;
37     }
38 
compare(in void * p1,in void * p2)39     override int compare(in void* p1, in void* p2)
40     {
41         Object o1 = *cast(Object*)p1;
42         Object o2 = *cast(Object*)p2;
43         int c = 0;
44 
45         // Regard null references as always being "less than"
46         if (!(o1 is o2))
47         {
48             if (o1)
49             {
50                 if (!o2)
51                     c = 1;
52                 else
53                     c = o1.opCmp(o2);
54             }
55             else
56                 c = -1;
57         }
58         return c;
59     }
60 
tsize()61     override @property size_t tsize() nothrow pure
62     {
63         return Object.sizeof;
64     }
65 
initializer()66     override const(void)[] initializer() const @trusted
67     {
68         return (cast(void *)null)[0 .. Object.sizeof];
69     }
70 
flags()71     override @property uint flags() nothrow pure
72     {
73         return 1;
74     }
75 }
76