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->GetClangASTType(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::ClangASTType c_type = m_opaque_sp->GetClangASTType(); 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 } 149