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 19using namespace lldb; 20using namespace lldb_private; 21 22SBTypeNameSpecifier::SBTypeNameSpecifier() : 23m_opaque_sp() 24{ 25} 26 27SBTypeNameSpecifier::SBTypeNameSpecifier (const char* name, 28 bool is_regex) : 29m_opaque_sp(new TypeNameSpecifierImpl(name, is_regex)) 30{ 31 if (name == NULL || (*name) == 0) 32 m_opaque_sp.reset(); 33} 34 35SBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) : 36m_opaque_sp() 37{ 38 if (type.IsValid()) 39 m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType())); 40} 41 42SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) : 43m_opaque_sp(rhs.m_opaque_sp) 44{} 45 46SBTypeNameSpecifier::~SBTypeNameSpecifier () 47{ 48} 49 50bool 51SBTypeNameSpecifier::IsValid() const 52{ 53 return m_opaque_sp.get() != NULL; 54} 55 56const char* 57SBTypeNameSpecifier::GetName () 58{ 59 if (!IsValid()) 60 return NULL; 61 62 return m_opaque_sp->GetName(); 63} 64 65SBType 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 76bool 77SBTypeNameSpecifier::IsRegex () 78{ 79 if (!IsValid()) 80 return false; 81 82 return m_opaque_sp->IsRegex(); 83} 84 85bool 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 95lldb::SBTypeNameSpecifier & 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 105bool 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 113bool 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 127bool 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 135lldb::TypeNameSpecifierImplSP 136SBTypeNameSpecifier::GetSP () 137{ 138 return m_opaque_sp; 139} 140 141void 142SBTypeNameSpecifier::SetSP (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) 143{ 144 m_opaque_sp = type_namespec_sp; 145} 146 147SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) : 148m_opaque_sp(type_namespec_sp) 149{ 150} 151