1*969795f1SJim Ingham //===-- SBFileSpecListList.cpp ------------------------------------------*- C++ -*-===// 2*969795f1SJim Ingham // 3*969795f1SJim Ingham // The LLVM Compiler Infrastructure 4*969795f1SJim Ingham // 5*969795f1SJim Ingham // This file is distributed under the University of Illinois Open Source 6*969795f1SJim Ingham // License. See LICENSE.TXT for details. 7*969795f1SJim Ingham // 8*969795f1SJim Ingham //===----------------------------------------------------------------------===// 9*969795f1SJim Ingham 10*969795f1SJim Ingham #include <limits.h> 11*969795f1SJim Ingham 12*969795f1SJim Ingham #include "lldb/API/SBFileSpec.h" 13*969795f1SJim Ingham #include "lldb/API/SBFileSpecList.h" 14*969795f1SJim Ingham #include "lldb/API/SBStream.h" 15*969795f1SJim Ingham #include "lldb/Core/FileSpecList.h" 16*969795f1SJim Ingham #include "lldb/Core/Log.h" 17*969795f1SJim Ingham #include "lldb/Host/FileSpec.h" 18*969795f1SJim Ingham 19*969795f1SJim Ingham using namespace lldb; 20*969795f1SJim Ingham using namespace lldb_private; 21*969795f1SJim Ingham 22*969795f1SJim Ingham 23*969795f1SJim Ingham 24*969795f1SJim Ingham SBFileSpecList::SBFileSpecList () : 25*969795f1SJim Ingham m_opaque_ap(new FileSpecList()) 26*969795f1SJim Ingham { 27*969795f1SJim Ingham } 28*969795f1SJim Ingham 29*969795f1SJim Ingham SBFileSpecList::SBFileSpecList (const SBFileSpecList &rhs) : 30*969795f1SJim Ingham m_opaque_ap() 31*969795f1SJim Ingham { 32*969795f1SJim Ingham LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 33*969795f1SJim Ingham 34*969795f1SJim Ingham if (rhs.m_opaque_ap.get()) 35*969795f1SJim Ingham m_opaque_ap.reset (new FileSpecList (*(rhs.get()))); 36*969795f1SJim Ingham 37*969795f1SJim Ingham if (log) 38*969795f1SJim Ingham { 39*969795f1SJim Ingham log->Printf ("SBFileSpecList::SBFileSpecList (const SBFileSpecList rhs.ap=%p) => SBFileSpecList(%p): %s", 40*969795f1SJim Ingham rhs.m_opaque_ap.get(), m_opaque_ap.get()); 41*969795f1SJim Ingham } 42*969795f1SJim Ingham } 43*969795f1SJim Ingham 44*969795f1SJim Ingham SBFileSpecList::~SBFileSpecList () 45*969795f1SJim Ingham { 46*969795f1SJim Ingham } 47*969795f1SJim Ingham 48*969795f1SJim Ingham const SBFileSpecList & 49*969795f1SJim Ingham SBFileSpecList::operator = (const SBFileSpecList &rhs) 50*969795f1SJim Ingham { 51*969795f1SJim Ingham if (this != &rhs) 52*969795f1SJim Ingham { 53*969795f1SJim Ingham m_opaque_ap.reset (new lldb_private::FileSpecList(*(rhs.get()))); 54*969795f1SJim Ingham } 55*969795f1SJim Ingham return *this; 56*969795f1SJim Ingham } 57*969795f1SJim Ingham 58*969795f1SJim Ingham uint32_t 59*969795f1SJim Ingham SBFileSpecList::GetSize () const 60*969795f1SJim Ingham { 61*969795f1SJim Ingham return m_opaque_ap->GetSize(); 62*969795f1SJim Ingham } 63*969795f1SJim Ingham 64*969795f1SJim Ingham void 65*969795f1SJim Ingham SBFileSpecList::Append (const SBFileSpec &sb_file) 66*969795f1SJim Ingham { 67*969795f1SJim Ingham m_opaque_ap->Append (sb_file.ref()); 68*969795f1SJim Ingham } 69*969795f1SJim Ingham 70*969795f1SJim Ingham bool 71*969795f1SJim Ingham SBFileSpecList::AppendIfUnique (const SBFileSpec &sb_file) 72*969795f1SJim Ingham { 73*969795f1SJim Ingham return m_opaque_ap->AppendIfUnique (sb_file.ref()); 74*969795f1SJim Ingham } 75*969795f1SJim Ingham 76*969795f1SJim Ingham void 77*969795f1SJim Ingham SBFileSpecList::Clear() 78*969795f1SJim Ingham { 79*969795f1SJim Ingham m_opaque_ap->Clear(); 80*969795f1SJim Ingham } 81*969795f1SJim Ingham 82*969795f1SJim Ingham uint32_t 83*969795f1SJim Ingham SBFileSpecList::FindFileIndex (uint32_t idx, const SBFileSpec &sb_file) 84*969795f1SJim Ingham { 85*969795f1SJim Ingham return m_opaque_ap->FindFileIndex (idx, sb_file.ref()); 86*969795f1SJim Ingham } 87*969795f1SJim Ingham 88*969795f1SJim Ingham const SBFileSpec 89*969795f1SJim Ingham SBFileSpecList::GetFileSpecAtIndex (uint32_t idx) const 90*969795f1SJim Ingham { 91*969795f1SJim Ingham SBFileSpec new_spec; 92*969795f1SJim Ingham new_spec.SetFileSpec(m_opaque_ap->GetFileSpecAtIndex(idx)); 93*969795f1SJim Ingham return new_spec; 94*969795f1SJim Ingham } 95*969795f1SJim Ingham 96*969795f1SJim Ingham const lldb_private::FileSpecList * 97*969795f1SJim Ingham SBFileSpecList::operator->() const 98*969795f1SJim Ingham { 99*969795f1SJim Ingham return m_opaque_ap.get(); 100*969795f1SJim Ingham } 101*969795f1SJim Ingham 102*969795f1SJim Ingham const lldb_private::FileSpecList * 103*969795f1SJim Ingham SBFileSpecList::get() const 104*969795f1SJim Ingham { 105*969795f1SJim Ingham return m_opaque_ap.get(); 106*969795f1SJim Ingham } 107*969795f1SJim Ingham 108*969795f1SJim Ingham 109*969795f1SJim Ingham const lldb_private::FileSpecList & 110*969795f1SJim Ingham SBFileSpecList::operator*() const 111*969795f1SJim Ingham { 112*969795f1SJim Ingham return *m_opaque_ap.get(); 113*969795f1SJim Ingham } 114*969795f1SJim Ingham 115*969795f1SJim Ingham const lldb_private::FileSpecList & 116*969795f1SJim Ingham SBFileSpecList::ref() const 117*969795f1SJim Ingham { 118*969795f1SJim Ingham return *m_opaque_ap.get(); 119*969795f1SJim Ingham } 120*969795f1SJim Ingham 121*969795f1SJim Ingham bool 122*969795f1SJim Ingham SBFileSpecList::GetDescription (SBStream &description) const 123*969795f1SJim Ingham { 124*969795f1SJim Ingham if (m_opaque_ap.get()) 125*969795f1SJim Ingham { 126*969795f1SJim Ingham uint32_t num_files = m_opaque_ap->GetSize(); 127*969795f1SJim Ingham description.Printf ("%d files: ", num_files); 128*969795f1SJim Ingham for (uint32_t i = 0; i < num_files; i++) 129*969795f1SJim Ingham { 130*969795f1SJim Ingham char path[PATH_MAX]; 131*969795f1SJim Ingham if (m_opaque_ap->GetFileSpecAtIndex(i).GetPath(path, sizeof(path))) 132*969795f1SJim Ingham description.Printf ("\n %s", path); 133*969795f1SJim Ingham } 134*969795f1SJim Ingham } 135*969795f1SJim Ingham else 136*969795f1SJim Ingham description.Printf ("No value"); 137*969795f1SJim Ingham 138*969795f1SJim Ingham return true; 139*969795f1SJim Ingham } 140