180814287SRaphael Isemann //===-- SBStringList.cpp --------------------------------------------------===//
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"
10bd4bf82aSJonas Devlieghere #include "Utils.h"
11*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
12573ab909SZachary Turner #include "lldb/Utility/StringList.h"
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner using namespace lldb;
1530fdc8d8SChris Lattner using namespace lldb_private;
1630fdc8d8SChris Lattner 
SBStringList()17*1755f5b1SJonas Devlieghere SBStringList::SBStringList() { LLDB_INSTRUMENT_VA(this); }
1830fdc8d8SChris Lattner 
SBStringList(const lldb_private::StringList * lldb_strings_ptr)19a3436f73SKazu Hirata SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr) {
2030fdc8d8SChris Lattner   if (lldb_strings_ptr)
21a8f3ae7cSJonas Devlieghere     m_opaque_up = std::make_unique<StringList>(*lldb_strings_ptr);
2230fdc8d8SChris Lattner }
2330fdc8d8SChris Lattner 
SBStringList(const SBStringList & rhs)24a3436f73SKazu Hirata SBStringList::SBStringList(const SBStringList &rhs) {
25*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
26baf5664fSJonas Devlieghere 
27bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
operator =(const SBStringList & rhs)30b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
31*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
32baf5664fSJonas Devlieghere 
33bd4bf82aSJonas Devlieghere   if (this != &rhs)
34bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
35d232abc3SJonas Devlieghere   return *this;
3630fdc8d8SChris Lattner }
3730fdc8d8SChris Lattner 
38866b7a65SJonas Devlieghere SBStringList::~SBStringList() = default;
39efabb123SGreg Clayton 
operator ->() const40b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const {
41d5b44036SJonas Devlieghere   return m_opaque_up.get();
4230fdc8d8SChris Lattner }
4330fdc8d8SChris Lattner 
operator *() const44b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const {
45d5b44036SJonas Devlieghere   return *m_opaque_up;
4630fdc8d8SChris Lattner }
4730fdc8d8SChris Lattner 
IsValid() const48baf5664fSJonas Devlieghere bool SBStringList::IsValid() const {
49*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
507f5237bcSPavel Labath   return this->operator bool();
517f5237bcSPavel Labath }
operator bool() const527f5237bcSPavel Labath SBStringList::operator bool() const {
53*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
54baf5664fSJonas Devlieghere 
55248a1305SKonrad Kleine   return (m_opaque_up != nullptr);
56baf5664fSJonas Devlieghere }
5730fdc8d8SChris Lattner 
AppendString(const char * str)58b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) {
59*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, str);
60baf5664fSJonas Devlieghere 
61248a1305SKonrad Kleine   if (str != nullptr) {
6230fdc8d8SChris Lattner     if (IsValid())
63d5b44036SJonas Devlieghere       m_opaque_up->AppendString(str);
6430fdc8d8SChris Lattner     else
651c0bbe43SJonas Devlieghere       m_opaque_up = std::make_unique<lldb_private::StringList>(str);
6630fdc8d8SChris Lattner   }
6730fdc8d8SChris Lattner }
6830fdc8d8SChris Lattner 
AppendList(const char ** strv,int strc)69b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) {
70*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, strv, strc);
71baf5664fSJonas Devlieghere 
72248a1305SKonrad Kleine   if ((strv != nullptr) && (strc > 0)) {
7330fdc8d8SChris Lattner     if (IsValid())
74d5b44036SJonas Devlieghere       m_opaque_up->AppendList(strv, strc);
7530fdc8d8SChris Lattner     else
761c0bbe43SJonas Devlieghere       m_opaque_up = std::make_unique<lldb_private::StringList>(strv, strc);
7730fdc8d8SChris Lattner   }
7830fdc8d8SChris Lattner }
7930fdc8d8SChris Lattner 
AppendList(const SBStringList & strings)80b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) {
81*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, strings);
82baf5664fSJonas Devlieghere 
83b9c1b51eSKate Stone   if (strings.IsValid()) {
8430fdc8d8SChris Lattner     if (!IsValid())
851c0bbe43SJonas Devlieghere       m_opaque_up = std::make_unique<lldb_private::StringList>();
86d5b44036SJonas Devlieghere     m_opaque_up->AppendList(*(strings.m_opaque_up));
8730fdc8d8SChris Lattner   }
8830fdc8d8SChris Lattner }
8930fdc8d8SChris Lattner 
AppendList(const StringList & strings)9092d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) {
9192d1960eSJim Ingham   if (!IsValid())
921c0bbe43SJonas Devlieghere     m_opaque_up = std::make_unique<lldb_private::StringList>();
93d5b44036SJonas Devlieghere   m_opaque_up->AppendList(strings);
9492d1960eSJim Ingham }
9592d1960eSJim Ingham 
GetSize() const96b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const {
97*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
98baf5664fSJonas Devlieghere 
99b9c1b51eSKate Stone   if (IsValid()) {
100d5b44036SJonas Devlieghere     return m_opaque_up->GetSize();
10130fdc8d8SChris Lattner   }
10230fdc8d8SChris Lattner   return 0;
10330fdc8d8SChris Lattner }
10430fdc8d8SChris Lattner 
GetStringAtIndex(size_t idx)105b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) {
106*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, idx);
107baf5664fSJonas Devlieghere 
108b9c1b51eSKate Stone   if (IsValid()) {
109d5b44036SJonas Devlieghere     return m_opaque_up->GetStringAtIndex(idx);
11030fdc8d8SChris Lattner   }
111248a1305SKonrad Kleine   return nullptr;
11230fdc8d8SChris Lattner }
11330fdc8d8SChris Lattner 
GetStringAtIndex(size_t idx) const114b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const {
115*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, idx);
116baf5664fSJonas Devlieghere 
117b9c1b51eSKate Stone   if (IsValid()) {
118d5b44036SJonas Devlieghere     return m_opaque_up->GetStringAtIndex(idx);
11976bb8d67SJim Ingham   }
120248a1305SKonrad Kleine   return nullptr;
12176bb8d67SJim Ingham }
12276bb8d67SJim Ingham 
Clear()123b9c1b51eSKate Stone void SBStringList::Clear() {
124*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
125baf5664fSJonas Devlieghere 
126b9c1b51eSKate Stone   if (IsValid()) {
127d5b44036SJonas Devlieghere     m_opaque_up->Clear();
12830fdc8d8SChris Lattner   }
12930fdc8d8SChris Lattner }
130