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_Along; 15 16private import core.stdc.string; 17 18// long[] 19 20class TypeInfo_Al : TypeInfo_Array 21{ 22 override bool opEquals(Object o) { return TypeInfo.opEquals(o); } 23 24 override string toString() const { return "long[]"; } 25 26 override size_t getHash(scope const void* p) @trusted const 27 { 28 // Hash as if unsigned. 29 const s = *cast(const ulong[]*)p; 30 return hashOf(s); 31 } 32 33 override bool equals(in void* p1, in void* p2) const 34 { 35 long[] s1 = *cast(long[]*)p1; 36 long[] s2 = *cast(long[]*)p2; 37 38 return s1.length == s2.length && 39 memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0; 40 } 41 42 override int compare(in void* p1, in void* p2) const 43 { 44 long[] s1 = *cast(long[]*)p1; 45 long[] s2 = *cast(long[]*)p2; 46 size_t len = s1.length; 47 48 if (s2.length < len) 49 len = s2.length; 50 for (size_t u = 0; u < len; u++) 51 { 52 if (s1[u] < s2[u]) 53 return -1; 54 else if (s1[u] > s2[u]) 55 return 1; 56 } 57 if (s1.length < s2.length) 58 return -1; 59 else if (s1.length > s2.length) 60 return 1; 61 return 0; 62 } 63 64 override @property inout(TypeInfo) next() inout 65 { 66 return cast(inout)typeid(long); 67 } 68} 69 70 71// ulong[] 72 73class TypeInfo_Am : TypeInfo_Al 74{ 75 override string toString() const { return "ulong[]"; } 76 77 override int compare(in void* p1, in void* p2) const 78 { 79 ulong[] s1 = *cast(ulong[]*)p1; 80 ulong[] s2 = *cast(ulong[]*)p2; 81 size_t len = s1.length; 82 83 if (s2.length < len) 84 len = s2.length; 85 for (size_t u = 0; u < len; u++) 86 { 87 if (s1[u] < s2[u]) 88 return -1; 89 else if (s1[u] > s2[u]) 90 return 1; 91 } 92 if (s1.length < s2.length) 93 return -1; 94 else if (s1.length > s2.length) 95 return 1; 96 return 0; 97 } 98 99 override @property inout(TypeInfo) next() inout 100 { 101 return cast(inout)typeid(ulong); 102 } 103} 104