1*696bd635SAlexander Shaposhnikov //===-- SBFileSpecList.cpp --------------------------------------*- C++ -*-===//
2969795f1SJim Ingham //
3969795f1SJim Ingham //                     The LLVM Compiler Infrastructure
4969795f1SJim Ingham //
5969795f1SJim Ingham // This file is distributed under the University of Illinois Open Source
6969795f1SJim Ingham // License. See LICENSE.TXT for details.
7969795f1SJim Ingham //
8969795f1SJim Ingham //===----------------------------------------------------------------------===//
9969795f1SJim Ingham 
10969795f1SJim Ingham #include <limits.h>
11969795f1SJim Ingham 
12969795f1SJim Ingham #include "lldb/API/SBFileSpec.h"
13969795f1SJim Ingham #include "lldb/API/SBFileSpecList.h"
14969795f1SJim Ingham #include "lldb/API/SBStream.h"
15969795f1SJim Ingham #include "lldb/Core/FileSpecList.h"
16969795f1SJim Ingham #include "lldb/Core/Log.h"
17da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h"
18969795f1SJim Ingham #include "lldb/Host/FileSpec.h"
19969795f1SJim Ingham 
20969795f1SJim Ingham using namespace lldb;
21969795f1SJim Ingham using namespace lldb_private;
22969795f1SJim Ingham 
23b9c1b51eSKate Stone SBFileSpecList::SBFileSpecList() : m_opaque_ap(new FileSpecList()) {}
24969795f1SJim Ingham 
25b9c1b51eSKate Stone SBFileSpecList::SBFileSpecList(const SBFileSpecList &rhs) : m_opaque_ap() {
265160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
27969795f1SJim Ingham 
28969795f1SJim Ingham   if (rhs.m_opaque_ap.get())
29969795f1SJim Ingham     m_opaque_ap.reset(new FileSpecList(*(rhs.get())));
30969795f1SJim Ingham 
31b9c1b51eSKate Stone   if (log) {
32b9c1b51eSKate Stone     log->Printf("SBFileSpecList::SBFileSpecList (const SBFileSpecList "
33b9c1b51eSKate Stone                 "rhs.ap=%p) => SBFileSpecList(%p)",
34324a1036SSaleem Abdulrasool                 static_cast<void *>(rhs.m_opaque_ap.get()),
35324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_ap.get()));
36969795f1SJim Ingham   }
37969795f1SJim Ingham }
38969795f1SJim Ingham 
39b9c1b51eSKate Stone SBFileSpecList::~SBFileSpecList() {}
40969795f1SJim Ingham 
41b9c1b51eSKate Stone const SBFileSpecList &SBFileSpecList::operator=(const SBFileSpecList &rhs) {
42b9c1b51eSKate Stone   if (this != &rhs) {
43969795f1SJim Ingham     m_opaque_ap.reset(new lldb_private::FileSpecList(*(rhs.get())));
44969795f1SJim Ingham   }
45969795f1SJim Ingham   return *this;
46969795f1SJim Ingham }
47969795f1SJim Ingham 
48b9c1b51eSKate Stone uint32_t SBFileSpecList::GetSize() const { return m_opaque_ap->GetSize(); }
49969795f1SJim Ingham 
50b9c1b51eSKate Stone void SBFileSpecList::Append(const SBFileSpec &sb_file) {
51969795f1SJim Ingham   m_opaque_ap->Append(sb_file.ref());
52969795f1SJim Ingham }
53969795f1SJim Ingham 
54b9c1b51eSKate Stone bool SBFileSpecList::AppendIfUnique(const SBFileSpec &sb_file) {
55969795f1SJim Ingham   return m_opaque_ap->AppendIfUnique(sb_file.ref());
56969795f1SJim Ingham }
57969795f1SJim Ingham 
58b9c1b51eSKate Stone void SBFileSpecList::Clear() { m_opaque_ap->Clear(); }
59969795f1SJim Ingham 
60b9c1b51eSKate Stone uint32_t SBFileSpecList::FindFileIndex(uint32_t idx, const SBFileSpec &sb_file,
61b9c1b51eSKate Stone                                        bool full) {
6287df91b8SJim Ingham   return m_opaque_ap->FindFileIndex(idx, sb_file.ref(), full);
63969795f1SJim Ingham }
64969795f1SJim Ingham 
65b9c1b51eSKate Stone const SBFileSpec SBFileSpecList::GetFileSpecAtIndex(uint32_t idx) const {
66969795f1SJim Ingham   SBFileSpec new_spec;
67969795f1SJim Ingham   new_spec.SetFileSpec(m_opaque_ap->GetFileSpecAtIndex(idx));
68969795f1SJim Ingham   return new_spec;
69969795f1SJim Ingham }
70969795f1SJim Ingham 
71b9c1b51eSKate Stone const lldb_private::FileSpecList *SBFileSpecList::operator->() const {
72969795f1SJim Ingham   return m_opaque_ap.get();
73969795f1SJim Ingham }
74969795f1SJim Ingham 
75b9c1b51eSKate Stone const lldb_private::FileSpecList *SBFileSpecList::get() const {
76969795f1SJim Ingham   return m_opaque_ap.get();
77969795f1SJim Ingham }
78969795f1SJim Ingham 
79b9c1b51eSKate Stone const lldb_private::FileSpecList &SBFileSpecList::operator*() const {
80969795f1SJim Ingham   return *m_opaque_ap.get();
81969795f1SJim Ingham }
82969795f1SJim Ingham 
83b9c1b51eSKate Stone const lldb_private::FileSpecList &SBFileSpecList::ref() const {
84969795f1SJim Ingham   return *m_opaque_ap.get();
85969795f1SJim Ingham }
86969795f1SJim Ingham 
87b9c1b51eSKate Stone bool SBFileSpecList::GetDescription(SBStream &description) const {
88da7bc7d0SGreg Clayton   Stream &strm = description.ref();
89da7bc7d0SGreg Clayton 
90b9c1b51eSKate Stone   if (m_opaque_ap.get()) {
91969795f1SJim Ingham     uint32_t num_files = m_opaque_ap->GetSize();
92da7bc7d0SGreg Clayton     strm.Printf("%d files: ", num_files);
93b9c1b51eSKate Stone     for (uint32_t i = 0; i < num_files; i++) {
94969795f1SJim Ingham       char path[PATH_MAX];
95969795f1SJim Ingham       if (m_opaque_ap->GetFileSpecAtIndex(i).GetPath(path, sizeof(path)))
96da7bc7d0SGreg Clayton         strm.Printf("\n    %s", path);
97969795f1SJim Ingham     }
98b9c1b51eSKate Stone   } else
99da7bc7d0SGreg Clayton     strm.PutCString("No value");
100969795f1SJim Ingham 
101969795f1SJim Ingham   return true;
102969795f1SJim Ingham }
103