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/lldb-python.h" 11 12 #include "lldb/API/SBTypeNameSpecifier.h" 13 14 #include "lldb/API/SBStream.h" 15 #include "lldb/API/SBType.h" 16 17 #include "lldb/DataFormatters/DataVisualization.h" 18 19 using namespace lldb; 20 using namespace lldb_private; 21 SBTypeNameSpecifier()22SBTypeNameSpecifier::SBTypeNameSpecifier() : 23 m_opaque_sp() 24 { 25 } 26 SBTypeNameSpecifier(const char * name,bool is_regex)27SBTypeNameSpecifier::SBTypeNameSpecifier (const char* name, 28 bool is_regex) : 29 m_opaque_sp(new TypeNameSpecifierImpl(name, is_regex)) 30 { 31 if (name == NULL || (*name) == 0) 32 m_opaque_sp.reset(); 33 } 34 SBTypeNameSpecifier(SBType type)35SBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) : 36 m_opaque_sp() 37 { 38 if (type.IsValid()) 39 m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType())); 40 } 41 SBTypeNameSpecifier(const lldb::SBTypeNameSpecifier & rhs)42SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) : 43 m_opaque_sp(rhs.m_opaque_sp) 44 {} 45 ~SBTypeNameSpecifier()46SBTypeNameSpecifier::~SBTypeNameSpecifier () 47 { 48 } 49 50 bool IsValid() const51SBTypeNameSpecifier::IsValid() const 52 { 53 return m_opaque_sp.get() != NULL; 54 } 55 56 const char* GetName()57SBTypeNameSpecifier::GetName () 58 { 59 if (!IsValid()) 60 return NULL; 61 62 return m_opaque_sp->GetName(); 63 } 64 65 SBType GetType()66SBTypeNameSpecifier::GetType () 67 { 68 if (!IsValid()) 69 return SBType(); 70 lldb_private::ClangASTType c_type = m_opaque_sp->GetClangASTType(); 71 if (c_type.IsValid()) 72 return SBType(c_type); 73 return SBType(); 74 } 75 76 bool IsRegex()77SBTypeNameSpecifier::IsRegex () 78 { 79 if (!IsValid()) 80 return false; 81 82 return m_opaque_sp->IsRegex(); 83 } 84 85 bool GetDescription(lldb::SBStream & description,lldb::DescriptionLevel description_level)86SBTypeNameSpecifier::GetDescription (lldb::SBStream &description, 87 lldb::DescriptionLevel description_level) 88 { 89 if (!IsValid()) 90 return false; 91 description.Printf("SBTypeNameSpecifier(%s,%s)", GetName(), IsRegex() ? "regex" : "plain"); 92 return true; 93 } 94 95 lldb::SBTypeNameSpecifier & operator =(const lldb::SBTypeNameSpecifier & rhs)96SBTypeNameSpecifier::operator = (const lldb::SBTypeNameSpecifier &rhs) 97 { 98 if (this != &rhs) 99 { 100 m_opaque_sp = rhs.m_opaque_sp; 101 } 102 return *this; 103 } 104 105 bool operator ==(lldb::SBTypeNameSpecifier & rhs)106SBTypeNameSpecifier::operator == (lldb::SBTypeNameSpecifier &rhs) 107 { 108 if (IsValid() == false) 109 return !rhs.IsValid(); 110 return m_opaque_sp == rhs.m_opaque_sp; 111 } 112 113 bool IsEqualTo(lldb::SBTypeNameSpecifier & rhs)114SBTypeNameSpecifier::IsEqualTo (lldb::SBTypeNameSpecifier &rhs) 115 { 116 if (IsValid() == false) 117 return !rhs.IsValid(); 118 119 if (IsRegex() != rhs.IsRegex()) 120 return false; 121 if (GetName() == NULL || rhs.GetName() == NULL) 122 return false; 123 124 return (strcmp(GetName(), rhs.GetName()) == 0); 125 } 126 127 bool operator !=(lldb::SBTypeNameSpecifier & rhs)128SBTypeNameSpecifier::operator != (lldb::SBTypeNameSpecifier &rhs) 129 { 130 if (IsValid() == false) 131 return !rhs.IsValid(); 132 return m_opaque_sp != rhs.m_opaque_sp; 133 } 134 135 lldb::TypeNameSpecifierImplSP GetSP()136SBTypeNameSpecifier::GetSP () 137 { 138 return m_opaque_sp; 139 } 140 141 void SetSP(const lldb::TypeNameSpecifierImplSP & type_namespec_sp)142SBTypeNameSpecifier::SetSP (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) 143 { 144 m_opaque_sp = type_namespec_sp; 145 } 146 SBTypeNameSpecifier(const lldb::TypeNameSpecifierImplSP & type_namespec_sp)147SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) : 148 m_opaque_sp(type_namespec_sp) 149 { 150 } 151