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 
17b9c1b51eSKate Stone SBStringList::SBStringList() : m_opaque_ap() {}
1830fdc8d8SChris Lattner 
19b9c1b51eSKate Stone SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr)
20b9c1b51eSKate Stone     : m_opaque_ap() {
2130fdc8d8SChris Lattner   if (lldb_strings_ptr)
226611103cSGreg Clayton     m_opaque_ap.reset(new lldb_private::StringList(*lldb_strings_ptr));
2330fdc8d8SChris Lattner }
2430fdc8d8SChris Lattner 
25b9c1b51eSKate Stone SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_ap() {
2630fdc8d8SChris Lattner   if (rhs.IsValid())
276611103cSGreg Clayton     m_opaque_ap.reset(new lldb_private::StringList(*rhs));
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
30b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
31b9c1b51eSKate Stone   if (this != &rhs) {
3230fdc8d8SChris Lattner     if (rhs.IsValid())
336611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(*rhs));
34efabb123SGreg Clayton     else
35efabb123SGreg Clayton       m_opaque_ap.reset();
36efabb123SGreg Clayton   }
3730fdc8d8SChris Lattner   return *this;
3830fdc8d8SChris Lattner }
3930fdc8d8SChris Lattner 
40b9c1b51eSKate Stone SBStringList::~SBStringList() {}
41efabb123SGreg Clayton 
42b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const {
436611103cSGreg Clayton   return m_opaque_ap.get();
4430fdc8d8SChris Lattner }
4530fdc8d8SChris Lattner 
46b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const {
476611103cSGreg Clayton   return *m_opaque_ap;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
50b9c1b51eSKate Stone bool SBStringList::IsValid() const { return (m_opaque_ap.get() != NULL); }
5130fdc8d8SChris Lattner 
52b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) {
53b9c1b51eSKate Stone   if (str != NULL) {
5430fdc8d8SChris Lattner     if (IsValid())
556611103cSGreg Clayton       m_opaque_ap->AppendString(str);
5630fdc8d8SChris Lattner     else
576611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(str));
5830fdc8d8SChris Lattner   }
5930fdc8d8SChris Lattner }
6030fdc8d8SChris Lattner 
61b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) {
62b9c1b51eSKate Stone   if ((strv != NULL) && (strc > 0)) {
6330fdc8d8SChris Lattner     if (IsValid())
646611103cSGreg Clayton       m_opaque_ap->AppendList(strv, strc);
6530fdc8d8SChris Lattner     else
666611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(strv, strc));
6730fdc8d8SChris Lattner   }
6830fdc8d8SChris Lattner }
6930fdc8d8SChris Lattner 
70b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) {
71b9c1b51eSKate Stone   if (strings.IsValid()) {
7230fdc8d8SChris Lattner     if (!IsValid())
736611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList());
746611103cSGreg Clayton     m_opaque_ap->AppendList(*(strings.m_opaque_ap));
7530fdc8d8SChris Lattner   }
7630fdc8d8SChris Lattner }
7730fdc8d8SChris Lattner 
78*92d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) {
79*92d1960eSJim Ingham   if (!IsValid())
80*92d1960eSJim Ingham     m_opaque_ap.reset(new lldb_private::StringList());
81*92d1960eSJim Ingham   m_opaque_ap->AppendList(strings);
82*92d1960eSJim Ingham }
83*92d1960eSJim Ingham 
84b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const {
85b9c1b51eSKate Stone   if (IsValid()) {
866611103cSGreg Clayton     return m_opaque_ap->GetSize();
8730fdc8d8SChris Lattner   }
8830fdc8d8SChris Lattner   return 0;
8930fdc8d8SChris Lattner }
9030fdc8d8SChris Lattner 
91b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) {
92b9c1b51eSKate Stone   if (IsValid()) {
936611103cSGreg Clayton     return m_opaque_ap->GetStringAtIndex(idx);
9430fdc8d8SChris Lattner   }
9530fdc8d8SChris Lattner   return NULL;
9630fdc8d8SChris Lattner }
9730fdc8d8SChris Lattner 
98b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const {
99b9c1b51eSKate Stone   if (IsValid()) {
10076bb8d67SJim Ingham     return m_opaque_ap->GetStringAtIndex(idx);
10176bb8d67SJim Ingham   }
10276bb8d67SJim Ingham   return NULL;
10376bb8d67SJim Ingham }
10476bb8d67SJim Ingham 
105b9c1b51eSKate Stone void SBStringList::Clear() {
106b9c1b51eSKate Stone   if (IsValid()) {
1076611103cSGreg Clayton     m_opaque_ap->Clear();
10830fdc8d8SChris Lattner   }
10930fdc8d8SChris Lattner }
110