1 //===-- SBFileSpec.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/SBFileSpec.h" 11 #include "lldb/Core/FileSpec.h" 12 13 using namespace lldb; 14 using namespace lldb_private; 15 16 17 18 SBFileSpec::SBFileSpec () : 19 m_opaque_ap() 20 { 21 } 22 23 SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 24 m_opaque_ap() 25 { 26 if (rhs.m_opaque_ap.get()) 27 m_opaque_ap.reset (new FileSpec (*m_opaque_ap)); 28 } 29 30 SBFileSpec::SBFileSpec (const char *path) : 31 m_opaque_ap(new FileSpec (path)) 32 { 33 } 34 35 SBFileSpec::~SBFileSpec () 36 { 37 } 38 39 const SBFileSpec & 40 SBFileSpec::operator = (const SBFileSpec &rhs) 41 { 42 if (this != &rhs) 43 { 44 if (rhs.IsValid()) 45 m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 46 } 47 return *this; 48 } 49 50 bool 51 SBFileSpec::IsValid() const 52 { 53 return m_opaque_ap.get() != NULL; 54 } 55 56 bool 57 SBFileSpec::Exists () const 58 { 59 if (m_opaque_ap.get()) 60 return m_opaque_ap->Exists(); 61 return false; 62 } 63 64 65 int 66 SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 67 { 68 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 69 } 70 71 const char * 72 SBFileSpec::GetFileName() const 73 { 74 if (m_opaque_ap.get()) 75 return m_opaque_ap->GetFilename().AsCString(); 76 return NULL; 77 } 78 79 const char * 80 SBFileSpec::GetDirectory() const 81 { 82 if (m_opaque_ap.get()) 83 return m_opaque_ap->GetDirectory().AsCString(); 84 return NULL; 85 } 86 87 uint32_t 88 SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 89 { 90 if (m_opaque_ap.get()) 91 return m_opaque_ap->GetPath (dst_path, dst_len); 92 93 if (dst_path && dst_len) 94 *dst_path = '\0'; 95 return 0; 96 } 97 98 99 const lldb_private::FileSpec * 100 SBFileSpec::operator->() const 101 { 102 return m_opaque_ap.get(); 103 } 104 105 const lldb_private::FileSpec * 106 SBFileSpec::get() const 107 { 108 return m_opaque_ap.get(); 109 } 110 111 112 const lldb_private::FileSpec & 113 SBFileSpec::operator*() const 114 { 115 return *m_opaque_ap.get(); 116 } 117 118 const lldb_private::FileSpec & 119 SBFileSpec::ref() const 120 { 121 return *m_opaque_ap.get(); 122 } 123 124 125 void 126 SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 127 { 128 if (m_opaque_ap.get()) 129 *m_opaque_ap = fs; 130 else 131 m_opaque_ap.reset (new FileSpec (fs)); 132 } 133 134