SBFileSpecList.cpp revision 314564
188800Skbyanc//===-- SBFileSpecList.cpp --------------------------------------*- C++ -*-===//
211498Sphk//
388800Skbyanc//                     The LLVM Compiler Infrastructure
419192Sphk//
519192Sphk// This file is distributed under the University of Illinois Open Source
6139103Sru// License. See LICENSE.TXT for details.
7219511Sbrucec//
811498Sphk//===----------------------------------------------------------------------===//
919192Sphk
1011498Sphk#include <limits.h>
1119192Sphk
1219192Sphk#include "lldb/API/SBFileSpec.h"
1319192Sphk#include "lldb/API/SBFileSpecList.h"
1419192Sphk#include "lldb/API/SBStream.h"
1511498Sphk#include "lldb/Core/FileSpecList.h"
1611498Sphk#include "lldb/Core/Log.h"
17#include "lldb/Core/Stream.h"
18#include "lldb/Host/FileSpec.h"
19
20using namespace lldb;
21using namespace lldb_private;
22
23SBFileSpecList::SBFileSpecList() : m_opaque_ap(new FileSpecList()) {}
24
25SBFileSpecList::SBFileSpecList(const SBFileSpecList &rhs) : m_opaque_ap() {
26  Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
27
28  if (rhs.m_opaque_ap.get())
29    m_opaque_ap.reset(new FileSpecList(*(rhs.get())));
30
31  if (log) {
32    log->Printf("SBFileSpecList::SBFileSpecList (const SBFileSpecList "
33                "rhs.ap=%p) => SBFileSpecList(%p)",
34                static_cast<void *>(rhs.m_opaque_ap.get()),
35                static_cast<void *>(m_opaque_ap.get()));
36  }
37}
38
39SBFileSpecList::~SBFileSpecList() {}
40
41const SBFileSpecList &SBFileSpecList::operator=(const SBFileSpecList &rhs) {
42  if (this != &rhs) {
43    m_opaque_ap.reset(new lldb_private::FileSpecList(*(rhs.get())));
44  }
45  return *this;
46}
47
48uint32_t SBFileSpecList::GetSize() const { return m_opaque_ap->GetSize(); }
49
50void SBFileSpecList::Append(const SBFileSpec &sb_file) {
51  m_opaque_ap->Append(sb_file.ref());
52}
53
54bool SBFileSpecList::AppendIfUnique(const SBFileSpec &sb_file) {
55  return m_opaque_ap->AppendIfUnique(sb_file.ref());
56}
57
58void SBFileSpecList::Clear() { m_opaque_ap->Clear(); }
59
60uint32_t SBFileSpecList::FindFileIndex(uint32_t idx, const SBFileSpec &sb_file,
61                                       bool full) {
62  return m_opaque_ap->FindFileIndex(idx, sb_file.ref(), full);
63}
64
65const SBFileSpec SBFileSpecList::GetFileSpecAtIndex(uint32_t idx) const {
66  SBFileSpec new_spec;
67  new_spec.SetFileSpec(m_opaque_ap->GetFileSpecAtIndex(idx));
68  return new_spec;
69}
70
71const lldb_private::FileSpecList *SBFileSpecList::operator->() const {
72  return m_opaque_ap.get();
73}
74
75const lldb_private::FileSpecList *SBFileSpecList::get() const {
76  return m_opaque_ap.get();
77}
78
79const lldb_private::FileSpecList &SBFileSpecList::operator*() const {
80  return *m_opaque_ap.get();
81}
82
83const lldb_private::FileSpecList &SBFileSpecList::ref() const {
84  return *m_opaque_ap.get();
85}
86
87bool SBFileSpecList::GetDescription(SBStream &description) const {
88  Stream &strm = description.ref();
89
90  if (m_opaque_ap.get()) {
91    uint32_t num_files = m_opaque_ap->GetSize();
92    strm.Printf("%d files: ", num_files);
93    for (uint32_t i = 0; i < num_files; i++) {
94      char path[PATH_MAX];
95      if (m_opaque_ap->GetFileSpecAtIndex(i).GetPath(path, sizeof(path)))
96        strm.Printf("\n    %s", path);
97    }
98  } else
99    strm.PutCString("No value");
100
101  return true;
102}
103