130fdc8d8SChris Lattner //===-- SBStringList.cpp ----------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
930fdc8d8SChris Lattner #include "lldb/API/SBStringList.h"
1030fdc8d8SChris Lattner 
11573ab909SZachary Turner #include "lldb/Utility/StringList.h"
1230fdc8d8SChris Lattner 
1330fdc8d8SChris Lattner using namespace lldb;
1430fdc8d8SChris Lattner using namespace lldb_private;
1530fdc8d8SChris Lattner 
16b9c1b51eSKate Stone SBStringList::SBStringList() : m_opaque_ap() {}
1730fdc8d8SChris Lattner 
18b9c1b51eSKate Stone SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr)
19b9c1b51eSKate Stone     : m_opaque_ap() {
2030fdc8d8SChris Lattner   if (lldb_strings_ptr)
216611103cSGreg Clayton     m_opaque_ap.reset(new lldb_private::StringList(*lldb_strings_ptr));
2230fdc8d8SChris Lattner }
2330fdc8d8SChris Lattner 
24b9c1b51eSKate Stone SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_ap() {
2530fdc8d8SChris Lattner   if (rhs.IsValid())
266611103cSGreg Clayton     m_opaque_ap.reset(new lldb_private::StringList(*rhs));
2730fdc8d8SChris Lattner }
2830fdc8d8SChris Lattner 
29b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
30b9c1b51eSKate Stone   if (this != &rhs) {
3130fdc8d8SChris Lattner     if (rhs.IsValid())
326611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(*rhs));
33efabb123SGreg Clayton     else
34efabb123SGreg Clayton       m_opaque_ap.reset();
35efabb123SGreg Clayton   }
3630fdc8d8SChris Lattner   return *this;
3730fdc8d8SChris Lattner }
3830fdc8d8SChris Lattner 
39b9c1b51eSKate Stone SBStringList::~SBStringList() {}
40efabb123SGreg Clayton 
41b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const {
426611103cSGreg Clayton   return m_opaque_ap.get();
4330fdc8d8SChris Lattner }
4430fdc8d8SChris Lattner 
45b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const {
466611103cSGreg Clayton   return *m_opaque_ap;
4730fdc8d8SChris Lattner }
4830fdc8d8SChris Lattner 
493447077aSJonas Devlieghere bool SBStringList::IsValid() const { return (m_opaque_ap != NULL); }
5030fdc8d8SChris Lattner 
51b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) {
52b9c1b51eSKate Stone   if (str != NULL) {
5330fdc8d8SChris Lattner     if (IsValid())
546611103cSGreg Clayton       m_opaque_ap->AppendString(str);
5530fdc8d8SChris Lattner     else
566611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(str));
5730fdc8d8SChris Lattner   }
5830fdc8d8SChris Lattner }
5930fdc8d8SChris Lattner 
60b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) {
61b9c1b51eSKate Stone   if ((strv != NULL) && (strc > 0)) {
6230fdc8d8SChris Lattner     if (IsValid())
636611103cSGreg Clayton       m_opaque_ap->AppendList(strv, strc);
6430fdc8d8SChris Lattner     else
656611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList(strv, strc));
6630fdc8d8SChris Lattner   }
6730fdc8d8SChris Lattner }
6830fdc8d8SChris Lattner 
69b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) {
70b9c1b51eSKate Stone   if (strings.IsValid()) {
7130fdc8d8SChris Lattner     if (!IsValid())
726611103cSGreg Clayton       m_opaque_ap.reset(new lldb_private::StringList());
736611103cSGreg Clayton     m_opaque_ap->AppendList(*(strings.m_opaque_ap));
7430fdc8d8SChris Lattner   }
7530fdc8d8SChris Lattner }
7630fdc8d8SChris Lattner 
7792d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) {
7892d1960eSJim Ingham   if (!IsValid())
7992d1960eSJim Ingham     m_opaque_ap.reset(new lldb_private::StringList());
8092d1960eSJim Ingham   m_opaque_ap->AppendList(strings);
8192d1960eSJim Ingham }
8292d1960eSJim Ingham 
83b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const {
84b9c1b51eSKate Stone   if (IsValid()) {
856611103cSGreg Clayton     return m_opaque_ap->GetSize();
8630fdc8d8SChris Lattner   }
8730fdc8d8SChris Lattner   return 0;
8830fdc8d8SChris Lattner }
8930fdc8d8SChris Lattner 
90b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) {
91b9c1b51eSKate Stone   if (IsValid()) {
926611103cSGreg Clayton     return m_opaque_ap->GetStringAtIndex(idx);
9330fdc8d8SChris Lattner   }
9430fdc8d8SChris Lattner   return NULL;
9530fdc8d8SChris Lattner }
9630fdc8d8SChris Lattner 
97b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const {
98b9c1b51eSKate Stone   if (IsValid()) {
9976bb8d67SJim Ingham     return m_opaque_ap->GetStringAtIndex(idx);
10076bb8d67SJim Ingham   }
10176bb8d67SJim Ingham   return NULL;
10276bb8d67SJim Ingham }
10376bb8d67SJim Ingham 
104b9c1b51eSKate Stone void SBStringList::Clear() {
105b9c1b51eSKate Stone   if (IsValid()) {
1066611103cSGreg Clayton     m_opaque_ap->Clear();
10730fdc8d8SChris Lattner   }
10830fdc8d8SChris Lattner }
109