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