1 // Copyright (C) 2011 The Android Open Source Project
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions
6 // are met:
7 // 1. Redistributions of source code must retain the above copyright
8 //    notice, this list of conditions and the following disclaimer.
9 // 2. Redistributions in binary form must reproduce the above copyright
10 //    notice, this list of conditions and the following disclaimer in the
11 //    documentation and/or other materials provided with the distribution.
12 // 3. Neither the name of the project nor the names of its contributors
13 //    may be used to endorse or promote products derived from this software
14 //    without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 // ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 // SUCH DAMAGE.
27 //
28 // type_info.cc: Methods for std::type_info.
29 //
30 
31 #include <cxxabi.h>
32 #ifdef __ARM_EABI__
33 // ARM EABI requires string comprison for mangled type names for type_info
34 // equality.
35 #include <string.h>
36 #endif
37 
38 #include <typeinfo>
39 
40 namespace std
41 {
~type_info()42   type_info::~type_info()
43   {
44   }
45 
46   bool
operator ==(const type_info & rhs) const47   type_info::operator==(const type_info& rhs) const
48   {
49 #ifdef __ARM_EABI__
50     // IHI0041A CPPABI 3.2.5.6.  Because of weak linkage and share libraries,
51     // we perform string comparison.
52     return strcmp(this->__type_name, rhs.__type_name) == 0;
53 #else
54     return this == &rhs;
55 #endif
56   }
57 
58   bool
operator !=(const type_info & rhs) const59   type_info::operator!=(const type_info& rhs) const
60   {
61     return !this->operator==(rhs);
62   }
63 
64   bool
before(const type_info & rhs) const65   type_info::before(const type_info& rhs) const
66   {
67 #ifdef __ARM_EABI__
68     // IHI0041A CPPABI 3.2.5.6.  Because of weak linkage and share libraries,
69     // we perform string comparison.
70     return strcmp(this->__type_name, rhs.__type_name) < 0;
71 #else
72     return this < &rhs;
73 #endif
74   }
75 } // end namespace std
76