xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/libdruntime/rt/typeinfo/ti_long.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_long;
15 
16 // long
17 
18 class TypeInfo_l : TypeInfo
19 {
20     @trusted:
21     const:
22     pure:
23     nothrow:
24 
toString()25     override string toString() const pure nothrow @safe { return "long"; }
26 
getHash(scope const void * p)27     override size_t getHash(scope const void* p)
28     {
29         static if (ulong.sizeof <= size_t.sizeof)
30             return *cast(const long*)p;
31         else
32             // long & ulong hash the same if ulong.sizeof > size_t.sizeof.
33             return hashOf(*cast(const ulong*)p);
34     }
35 
equals(in void * p1,in void * p2)36     override bool equals(in void* p1, in void* p2)
37     {
38         return *cast(long *)p1 == *cast(long *)p2;
39     }
40 
compare(in void * p1,in void * p2)41     override int compare(in void* p1, in void* p2)
42     {
43         if (*cast(long *)p1 < *cast(long *)p2)
44             return -1;
45         else if (*cast(long *)p1 > *cast(long *)p2)
46             return 1;
47         return 0;
48     }
49 
tsize()50     override @property size_t tsize() nothrow pure
51     {
52         return long.sizeof;
53     }
54 
initializer()55     override const(void)[] initializer() const @trusted
56     {
57         return (cast(void *)null)[0 .. long.sizeof];
58     }
59 
swap(void * p1,void * p2)60     override void swap(void *p1, void *p2)
61     {
62         long t;
63 
64         t = *cast(long *)p1;
65         *cast(long *)p1 = *cast(long *)p2;
66         *cast(long *)p2 = t;
67     }
68 
talign()69     override @property size_t talign() nothrow pure
70     {
71         return long.alignof;
72     }
73 }
74