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