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 */
14module rt.typeinfo.ti_long;
15
16// long
17
18class TypeInfo_l : TypeInfo
19{
20    @trusted:
21    const:
22    pure:
23    nothrow:
24
25    override string toString() const pure nothrow @safe { return "long"; }
26
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
36    override bool equals(in void* p1, in void* p2)
37    {
38        return *cast(long *)p1 == *cast(long *)p2;
39    }
40
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
50    override @property size_t tsize() nothrow pure
51    {
52        return long.sizeof;
53    }
54
55    override const(void)[] initializer() const @trusted
56    {
57        return (cast(void *)null)[0 .. long.sizeof];
58    }
59
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
69    override @property size_t talign() nothrow pure
70    {
71        return long.alignof;
72    }
73}
74