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