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"
10*bd4bf82aSJonas Devlieghere #include "Utils.h"
11573ab909SZachary Turner #include "lldb/Utility/StringList.h"
1230fdc8d8SChris Lattner 
1330fdc8d8SChris Lattner using namespace lldb;
1430fdc8d8SChris Lattner using namespace lldb_private;
1530fdc8d8SChris Lattner 
16d5b44036SJonas Devlieghere SBStringList::SBStringList() : m_opaque_up() {}
1730fdc8d8SChris Lattner 
18b9c1b51eSKate Stone SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr)
19d5b44036SJonas Devlieghere     : m_opaque_up() {
2030fdc8d8SChris Lattner   if (lldb_strings_ptr)
21*bd4bf82aSJonas Devlieghere     m_opaque_up = llvm::make_unique<StringList>(*lldb_strings_ptr);
2230fdc8d8SChris Lattner }
2330fdc8d8SChris Lattner 
24d5b44036SJonas Devlieghere SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_up() {
25*bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
2630fdc8d8SChris Lattner }
2730fdc8d8SChris Lattner 
28b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
29*bd4bf82aSJonas Devlieghere   if (this != &rhs)
30*bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
3130fdc8d8SChris Lattner   return *this;
3230fdc8d8SChris Lattner }
3330fdc8d8SChris Lattner 
34b9c1b51eSKate Stone SBStringList::~SBStringList() {}
35efabb123SGreg Clayton 
36b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const {
37d5b44036SJonas Devlieghere   return m_opaque_up.get();
3830fdc8d8SChris Lattner }
3930fdc8d8SChris Lattner 
40b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const {
41d5b44036SJonas Devlieghere   return *m_opaque_up;
4230fdc8d8SChris Lattner }
4330fdc8d8SChris Lattner 
44d5b44036SJonas Devlieghere bool SBStringList::IsValid() const { return (m_opaque_up != NULL); }
4530fdc8d8SChris Lattner 
46b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) {
47b9c1b51eSKate Stone   if (str != NULL) {
4830fdc8d8SChris Lattner     if (IsValid())
49d5b44036SJonas Devlieghere       m_opaque_up->AppendString(str);
5030fdc8d8SChris Lattner     else
51d5b44036SJonas Devlieghere       m_opaque_up.reset(new lldb_private::StringList(str));
5230fdc8d8SChris Lattner   }
5330fdc8d8SChris Lattner }
5430fdc8d8SChris Lattner 
55b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) {
56b9c1b51eSKate Stone   if ((strv != NULL) && (strc > 0)) {
5730fdc8d8SChris Lattner     if (IsValid())
58d5b44036SJonas Devlieghere       m_opaque_up->AppendList(strv, strc);
5930fdc8d8SChris Lattner     else
60d5b44036SJonas Devlieghere       m_opaque_up.reset(new lldb_private::StringList(strv, strc));
6130fdc8d8SChris Lattner   }
6230fdc8d8SChris Lattner }
6330fdc8d8SChris Lattner 
64b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) {
65b9c1b51eSKate Stone   if (strings.IsValid()) {
6630fdc8d8SChris Lattner     if (!IsValid())
67d5b44036SJonas Devlieghere       m_opaque_up.reset(new lldb_private::StringList());
68d5b44036SJonas Devlieghere     m_opaque_up->AppendList(*(strings.m_opaque_up));
6930fdc8d8SChris Lattner   }
7030fdc8d8SChris Lattner }
7130fdc8d8SChris Lattner 
7292d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) {
7392d1960eSJim Ingham   if (!IsValid())
74d5b44036SJonas Devlieghere     m_opaque_up.reset(new lldb_private::StringList());
75d5b44036SJonas Devlieghere   m_opaque_up->AppendList(strings);
7692d1960eSJim Ingham }
7792d1960eSJim Ingham 
78b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const {
79b9c1b51eSKate Stone   if (IsValid()) {
80d5b44036SJonas Devlieghere     return m_opaque_up->GetSize();
8130fdc8d8SChris Lattner   }
8230fdc8d8SChris Lattner   return 0;
8330fdc8d8SChris Lattner }
8430fdc8d8SChris Lattner 
85b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) {
86b9c1b51eSKate Stone   if (IsValid()) {
87d5b44036SJonas Devlieghere     return m_opaque_up->GetStringAtIndex(idx);
8830fdc8d8SChris Lattner   }
8930fdc8d8SChris Lattner   return NULL;
9030fdc8d8SChris Lattner }
9130fdc8d8SChris Lattner 
92b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const {
93b9c1b51eSKate Stone   if (IsValid()) {
94d5b44036SJonas Devlieghere     return m_opaque_up->GetStringAtIndex(idx);
9576bb8d67SJim Ingham   }
9676bb8d67SJim Ingham   return NULL;
9776bb8d67SJim Ingham }
9876bb8d67SJim Ingham 
99b9c1b51eSKate Stone void SBStringList::Clear() {
100b9c1b51eSKate Stone   if (IsValid()) {
101d5b44036SJonas Devlieghere     m_opaque_up->Clear();
10230fdc8d8SChris Lattner   }
10330fdc8d8SChris Lattner }
104