130fdc8d8SChris Lattner //===-- SBStringList.cpp ----------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler 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 
16*d5b44036SJonas Devlieghere SBStringList::SBStringList() : m_opaque_up() {}
1730fdc8d8SChris Lattner 
18b9c1b51eSKate Stone SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr)
19*d5b44036SJonas Devlieghere     : m_opaque_up() {
2030fdc8d8SChris Lattner   if (lldb_strings_ptr)
21*d5b44036SJonas Devlieghere     m_opaque_up.reset(new lldb_private::StringList(*lldb_strings_ptr));
2230fdc8d8SChris Lattner }
2330fdc8d8SChris Lattner 
24*d5b44036SJonas Devlieghere SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_up() {
2530fdc8d8SChris Lattner   if (rhs.IsValid())
26*d5b44036SJonas Devlieghere     m_opaque_up.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())
32*d5b44036SJonas Devlieghere       m_opaque_up.reset(new lldb_private::StringList(*rhs));
33efabb123SGreg Clayton     else
34*d5b44036SJonas Devlieghere       m_opaque_up.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 {
42*d5b44036SJonas Devlieghere   return m_opaque_up.get();
4330fdc8d8SChris Lattner }
4430fdc8d8SChris Lattner 
45b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const {
46*d5b44036SJonas Devlieghere   return *m_opaque_up;
4730fdc8d8SChris Lattner }
4830fdc8d8SChris Lattner 
49*d5b44036SJonas Devlieghere bool SBStringList::IsValid() const { return (m_opaque_up != NULL); }
5030fdc8d8SChris Lattner 
51b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) {
52b9c1b51eSKate Stone   if (str != NULL) {
5330fdc8d8SChris Lattner     if (IsValid())
54*d5b44036SJonas Devlieghere       m_opaque_up->AppendString(str);
5530fdc8d8SChris Lattner     else
56*d5b44036SJonas Devlieghere       m_opaque_up.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())
63*d5b44036SJonas Devlieghere       m_opaque_up->AppendList(strv, strc);
6430fdc8d8SChris Lattner     else
65*d5b44036SJonas Devlieghere       m_opaque_up.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())
72*d5b44036SJonas Devlieghere       m_opaque_up.reset(new lldb_private::StringList());
73*d5b44036SJonas Devlieghere     m_opaque_up->AppendList(*(strings.m_opaque_up));
7430fdc8d8SChris Lattner   }
7530fdc8d8SChris Lattner }
7630fdc8d8SChris Lattner 
7792d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) {
7892d1960eSJim Ingham   if (!IsValid())
79*d5b44036SJonas Devlieghere     m_opaque_up.reset(new lldb_private::StringList());
80*d5b44036SJonas Devlieghere   m_opaque_up->AppendList(strings);
8192d1960eSJim Ingham }
8292d1960eSJim Ingham 
83b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const {
84b9c1b51eSKate Stone   if (IsValid()) {
85*d5b44036SJonas Devlieghere     return m_opaque_up->GetSize();
8630fdc8d8SChris Lattner   }
8730fdc8d8SChris Lattner   return 0;
8830fdc8d8SChris Lattner }
8930fdc8d8SChris Lattner 
90b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) {
91b9c1b51eSKate Stone   if (IsValid()) {
92*d5b44036SJonas Devlieghere     return m_opaque_up->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()) {
99*d5b44036SJonas Devlieghere     return m_opaque_up->GetStringAtIndex(idx);
10076bb8d67SJim Ingham   }
10176bb8d67SJim Ingham   return NULL;
10276bb8d67SJim Ingham }
10376bb8d67SJim Ingham 
104b9c1b51eSKate Stone void SBStringList::Clear() {
105b9c1b51eSKate Stone   if (IsValid()) {
106*d5b44036SJonas Devlieghere     m_opaque_up->Clear();
10730fdc8d8SChris Lattner   }
10830fdc8d8SChris Lattner }
109