130fdc8d8SChris Lattner //===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h"
1130fdc8d8SChris Lattner #include "lldb/Core/FileSpec.h"
1230fdc8d8SChris Lattner 
1330fdc8d8SChris Lattner using namespace lldb;
1430fdc8d8SChris Lattner using namespace lldb_private;
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner SBFileSpec::SBFileSpec () :
196611103cSGreg Clayton     m_opaque_ap()
2030fdc8d8SChris Lattner {
2130fdc8d8SChris Lattner }
2230fdc8d8SChris Lattner 
2330fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
246611103cSGreg Clayton     m_opaque_ap()
2530fdc8d8SChris Lattner {
266611103cSGreg Clayton     if (rhs.m_opaque_ap.get())
27*23fd10cbSJohnny Chen         m_opaque_ap.reset (new FileSpec (rhs.get()));
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
3030fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) :
316611103cSGreg Clayton     m_opaque_ap(new FileSpec (path))
3230fdc8d8SChris Lattner {
3330fdc8d8SChris Lattner }
3430fdc8d8SChris Lattner 
3530fdc8d8SChris Lattner SBFileSpec::~SBFileSpec ()
3630fdc8d8SChris Lattner {
3730fdc8d8SChris Lattner }
3830fdc8d8SChris Lattner 
3930fdc8d8SChris Lattner const SBFileSpec &
4030fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs)
4130fdc8d8SChris Lattner {
4230fdc8d8SChris Lattner     if (this != &rhs)
4330fdc8d8SChris Lattner     {
4430fdc8d8SChris Lattner         if (rhs.IsValid())
456611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get()));
4630fdc8d8SChris Lattner     }
4730fdc8d8SChris Lattner     return *this;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
5030fdc8d8SChris Lattner bool
5130fdc8d8SChris Lattner SBFileSpec::IsValid() const
5230fdc8d8SChris Lattner {
536611103cSGreg Clayton     return m_opaque_ap.get() != NULL;
5430fdc8d8SChris Lattner }
5530fdc8d8SChris Lattner 
5630fdc8d8SChris Lattner bool
5730fdc8d8SChris Lattner SBFileSpec::Exists () const
5830fdc8d8SChris Lattner {
596611103cSGreg Clayton     if (m_opaque_ap.get())
606611103cSGreg Clayton         return m_opaque_ap->Exists();
6130fdc8d8SChris Lattner     return false;
6230fdc8d8SChris Lattner }
6330fdc8d8SChris Lattner 
6430fdc8d8SChris Lattner 
6530fdc8d8SChris Lattner int
6630fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
6730fdc8d8SChris Lattner {
6830fdc8d8SChris Lattner     return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
6930fdc8d8SChris Lattner }
7030fdc8d8SChris Lattner 
7130fdc8d8SChris Lattner const char *
72*23fd10cbSJohnny Chen SBFileSpec::GetFilename() const
7330fdc8d8SChris Lattner {
746611103cSGreg Clayton     if (m_opaque_ap.get())
756611103cSGreg Clayton         return m_opaque_ap->GetFilename().AsCString();
7630fdc8d8SChris Lattner     return NULL;
7730fdc8d8SChris Lattner }
7830fdc8d8SChris Lattner 
7930fdc8d8SChris Lattner const char *
8030fdc8d8SChris Lattner SBFileSpec::GetDirectory() const
8130fdc8d8SChris Lattner {
826611103cSGreg Clayton     if (m_opaque_ap.get())
836611103cSGreg Clayton         return m_opaque_ap->GetDirectory().AsCString();
8430fdc8d8SChris Lattner     return NULL;
8530fdc8d8SChris Lattner }
8630fdc8d8SChris Lattner 
8730fdc8d8SChris Lattner uint32_t
8830fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
8930fdc8d8SChris Lattner {
906611103cSGreg Clayton     if (m_opaque_ap.get())
916611103cSGreg Clayton         return m_opaque_ap->GetPath (dst_path, dst_len);
9230fdc8d8SChris Lattner 
9330fdc8d8SChris Lattner     if (dst_path && dst_len)
9430fdc8d8SChris Lattner         *dst_path = '\0';
9530fdc8d8SChris Lattner     return 0;
9630fdc8d8SChris Lattner }
9730fdc8d8SChris Lattner 
9830fdc8d8SChris Lattner 
9930fdc8d8SChris Lattner const lldb_private::FileSpec *
10030fdc8d8SChris Lattner SBFileSpec::operator->() const
10130fdc8d8SChris Lattner {
1026611103cSGreg Clayton     return m_opaque_ap.get();
10330fdc8d8SChris Lattner }
10430fdc8d8SChris Lattner 
10530fdc8d8SChris Lattner const lldb_private::FileSpec *
10630fdc8d8SChris Lattner SBFileSpec::get() const
10730fdc8d8SChris Lattner {
1086611103cSGreg Clayton     return m_opaque_ap.get();
10930fdc8d8SChris Lattner }
11030fdc8d8SChris Lattner 
11130fdc8d8SChris Lattner 
11230fdc8d8SChris Lattner const lldb_private::FileSpec &
11330fdc8d8SChris Lattner SBFileSpec::operator*() const
11430fdc8d8SChris Lattner {
1156611103cSGreg Clayton     return *m_opaque_ap.get();
11630fdc8d8SChris Lattner }
11730fdc8d8SChris Lattner 
11830fdc8d8SChris Lattner const lldb_private::FileSpec &
11930fdc8d8SChris Lattner SBFileSpec::ref() const
12030fdc8d8SChris Lattner {
1216611103cSGreg Clayton     return *m_opaque_ap.get();
12230fdc8d8SChris Lattner }
12330fdc8d8SChris Lattner 
12430fdc8d8SChris Lattner 
12530fdc8d8SChris Lattner void
12630fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
12730fdc8d8SChris Lattner {
1286611103cSGreg Clayton     if (m_opaque_ap.get())
1296611103cSGreg Clayton         *m_opaque_ap = fs;
13030fdc8d8SChris Lattner     else
1316611103cSGreg Clayton         m_opaque_ap.reset (new FileSpec (fs));
13230fdc8d8SChris Lattner }
13330fdc8d8SChris Lattner 
134