]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp
MFV: r313101
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / API / SBTypeNameSpecifier.cpp
1 //===-- SBTypeNameSpecifier.cpp ------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "lldb/API/SBTypeNameSpecifier.h"
11
12 #include "lldb/API/SBStream.h"
13 #include "lldb/API/SBType.h"
14
15 #include "lldb/DataFormatters/DataVisualization.h"
16
17 using namespace lldb;
18 using namespace lldb_private;
19
20 SBTypeNameSpecifier::SBTypeNameSpecifier() :
21 m_opaque_sp()
22 {
23 }
24
25 SBTypeNameSpecifier::SBTypeNameSpecifier (const char* name,
26                                           bool is_regex) :
27 m_opaque_sp(new TypeNameSpecifierImpl(name, is_regex))
28 {
29     if (name == NULL || (*name) == 0)
30         m_opaque_sp.reset();
31 }
32
33 SBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) :
34 m_opaque_sp()
35 {
36     if (type.IsValid())
37         m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetCompilerType(true)));
38 }
39
40 SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) :
41 m_opaque_sp(rhs.m_opaque_sp)
42 {}
43
44 SBTypeNameSpecifier::~SBTypeNameSpecifier ()
45 {
46 }
47
48 bool
49 SBTypeNameSpecifier::IsValid() const
50 {
51     return m_opaque_sp.get() != NULL;
52 }
53
54 const char*
55 SBTypeNameSpecifier::GetName ()
56 {
57     if (!IsValid())
58         return NULL;
59     
60     return m_opaque_sp->GetName();
61 }
62
63 SBType
64 SBTypeNameSpecifier::GetType ()
65 {
66     if (!IsValid())
67         return SBType();
68     lldb_private::CompilerType c_type = m_opaque_sp->GetCompilerType();
69     if (c_type.IsValid())
70         return SBType(c_type);
71     return SBType();
72 }
73
74 bool
75 SBTypeNameSpecifier::IsRegex ()
76 {
77     if (!IsValid())
78         return false;
79
80     return m_opaque_sp->IsRegex();
81 }
82
83 bool
84 SBTypeNameSpecifier::GetDescription (lldb::SBStream &description, 
85                                      lldb::DescriptionLevel description_level)
86 {
87     if (!IsValid())
88         return false;
89     description.Printf("SBTypeNameSpecifier(%s,%s)", GetName(), IsRegex() ? "regex" : "plain");
90     return true;
91 }
92
93 lldb::SBTypeNameSpecifier &
94 SBTypeNameSpecifier::operator = (const lldb::SBTypeNameSpecifier &rhs)
95 {
96     if (this != &rhs)
97     {
98         m_opaque_sp = rhs.m_opaque_sp;
99     }
100     return *this;
101 }
102
103 bool
104 SBTypeNameSpecifier::operator == (lldb::SBTypeNameSpecifier &rhs)
105 {
106     if (IsValid() == false)
107         return !rhs.IsValid();
108     return m_opaque_sp == rhs.m_opaque_sp;
109 }
110
111 bool
112 SBTypeNameSpecifier::IsEqualTo (lldb::SBTypeNameSpecifier &rhs)
113 {
114     if (IsValid() == false)
115         return !rhs.IsValid();
116     
117     if (IsRegex() != rhs.IsRegex())
118         return false;
119     if (GetName() == NULL || rhs.GetName() == NULL)
120         return false;
121     
122     return (strcmp(GetName(), rhs.GetName()) == 0);
123 }
124
125 bool
126 SBTypeNameSpecifier::operator != (lldb::SBTypeNameSpecifier &rhs)
127 {
128     if (IsValid() == false)
129         return !rhs.IsValid();
130     return m_opaque_sp != rhs.m_opaque_sp;
131 }
132
133 lldb::TypeNameSpecifierImplSP
134 SBTypeNameSpecifier::GetSP ()
135 {
136     return m_opaque_sp;
137 }
138
139 void
140 SBTypeNameSpecifier::SetSP (const lldb::TypeNameSpecifierImplSP &type_namespec_sp)
141 {
142     m_opaque_sp = type_namespec_sp;
143 }
144
145 SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) :
146 m_opaque_sp(type_namespec_sp)
147 {
148 }