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