130fdc8d8SChris Lattner //===-- SBStringList.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/SBStringList.h"
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner #include "lldb/Core/StringList.h"
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner using namespace lldb;
1530fdc8d8SChris Lattner using namespace lldb_private;
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner SBStringList::SBStringList () :
186611103cSGreg Clayton     m_opaque_ap ()
1930fdc8d8SChris Lattner {
2030fdc8d8SChris Lattner }
2130fdc8d8SChris Lattner 
2230fdc8d8SChris Lattner SBStringList::SBStringList (const lldb_private::StringList *lldb_strings_ptr) :
236611103cSGreg Clayton     m_opaque_ap ()
2430fdc8d8SChris Lattner {
2530fdc8d8SChris Lattner     if (lldb_strings_ptr)
266611103cSGreg Clayton         m_opaque_ap.reset (new lldb_private::StringList (*lldb_strings_ptr));
2730fdc8d8SChris Lattner }
2830fdc8d8SChris Lattner 
2930fdc8d8SChris Lattner SBStringList::SBStringList (const SBStringList  &rhs) :
306611103cSGreg Clayton     m_opaque_ap ()
3130fdc8d8SChris Lattner {
3230fdc8d8SChris Lattner     if (rhs.IsValid())
336611103cSGreg Clayton         m_opaque_ap.reset (new lldb_private::StringList(*rhs));
3430fdc8d8SChris Lattner }
3530fdc8d8SChris Lattner 
3630fdc8d8SChris Lattner 
3730fdc8d8SChris Lattner const SBStringList &
3830fdc8d8SChris Lattner SBStringList::operator = (const SBStringList &rhs)
3930fdc8d8SChris Lattner {
40*efabb123SGreg Clayton     if (this != &rhs)
41*efabb123SGreg Clayton     {
4230fdc8d8SChris Lattner         if (rhs.IsValid())
436611103cSGreg Clayton             m_opaque_ap.reset(new lldb_private::StringList(*rhs));
44*efabb123SGreg Clayton         else
45*efabb123SGreg Clayton             m_opaque_ap.reset();
46*efabb123SGreg Clayton     }
4730fdc8d8SChris Lattner     return *this;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
50*efabb123SGreg Clayton SBStringList::~SBStringList ()
51*efabb123SGreg Clayton {
52*efabb123SGreg Clayton }
53*efabb123SGreg Clayton 
5430fdc8d8SChris Lattner const lldb_private::StringList *
5530fdc8d8SChris Lattner SBStringList::operator->() const
5630fdc8d8SChris Lattner {
576611103cSGreg Clayton     return m_opaque_ap.get();
5830fdc8d8SChris Lattner }
5930fdc8d8SChris Lattner 
6030fdc8d8SChris Lattner const lldb_private::StringList &
6130fdc8d8SChris Lattner SBStringList::operator*() const
6230fdc8d8SChris Lattner {
636611103cSGreg Clayton     return *m_opaque_ap;
6430fdc8d8SChris Lattner }
6530fdc8d8SChris Lattner 
6630fdc8d8SChris Lattner bool
6730fdc8d8SChris Lattner SBStringList::IsValid() const
6830fdc8d8SChris Lattner {
696611103cSGreg Clayton     return (m_opaque_ap.get() != NULL);
7030fdc8d8SChris Lattner }
7130fdc8d8SChris Lattner 
7230fdc8d8SChris Lattner void
7330fdc8d8SChris Lattner SBStringList::AppendString (const char *str)
7430fdc8d8SChris Lattner {
7530fdc8d8SChris Lattner     if (str != NULL)
7630fdc8d8SChris Lattner     {
7730fdc8d8SChris Lattner         if (IsValid())
786611103cSGreg Clayton             m_opaque_ap->AppendString (str);
7930fdc8d8SChris Lattner         else
806611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::StringList (str));
8130fdc8d8SChris Lattner     }
8230fdc8d8SChris Lattner 
8330fdc8d8SChris Lattner }
8430fdc8d8SChris Lattner 
8530fdc8d8SChris Lattner void
8630fdc8d8SChris Lattner SBStringList::AppendList (const char **strv, int strc)
8730fdc8d8SChris Lattner {
8830fdc8d8SChris Lattner     if ((strv != NULL)
8930fdc8d8SChris Lattner         && (strc > 0))
9030fdc8d8SChris Lattner     {
9130fdc8d8SChris Lattner         if (IsValid())
926611103cSGreg Clayton             m_opaque_ap->AppendList (strv, strc);
9330fdc8d8SChris Lattner         else
946611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::StringList (strv, strc));
9530fdc8d8SChris Lattner     }
9630fdc8d8SChris Lattner }
9730fdc8d8SChris Lattner 
9830fdc8d8SChris Lattner void
99aec0c322SJohnny Chen SBStringList::AppendList (const SBStringList &strings)
10030fdc8d8SChris Lattner {
10130fdc8d8SChris Lattner     if (strings.IsValid())
10230fdc8d8SChris Lattner     {
10330fdc8d8SChris Lattner         if (! IsValid())
1046611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::StringList());
1056611103cSGreg Clayton         m_opaque_ap->AppendList (*(strings.m_opaque_ap));
10630fdc8d8SChris Lattner     }
10730fdc8d8SChris Lattner }
10830fdc8d8SChris Lattner 
10930fdc8d8SChris Lattner uint32_t
11030fdc8d8SChris Lattner SBStringList::GetSize () const
11130fdc8d8SChris Lattner {
11230fdc8d8SChris Lattner     if (IsValid())
11330fdc8d8SChris Lattner     {
1146611103cSGreg Clayton         return m_opaque_ap->GetSize();
11530fdc8d8SChris Lattner     }
11630fdc8d8SChris Lattner     return 0;
11730fdc8d8SChris Lattner }
11830fdc8d8SChris Lattner 
11930fdc8d8SChris Lattner const char *
12030fdc8d8SChris Lattner SBStringList::GetStringAtIndex (size_t idx)
12130fdc8d8SChris Lattner {
12230fdc8d8SChris Lattner     if (IsValid())
12330fdc8d8SChris Lattner     {
1246611103cSGreg Clayton         return m_opaque_ap->GetStringAtIndex (idx);
12530fdc8d8SChris Lattner     }
12630fdc8d8SChris Lattner     return NULL;
12730fdc8d8SChris Lattner }
12830fdc8d8SChris Lattner 
12930fdc8d8SChris Lattner void
13030fdc8d8SChris Lattner SBStringList::Clear ()
13130fdc8d8SChris Lattner {
13230fdc8d8SChris Lattner     if (IsValid())
13330fdc8d8SChris Lattner     {
1346611103cSGreg Clayton         m_opaque_ap->Clear();
13530fdc8d8SChris Lattner     }
13630fdc8d8SChris Lattner }
137