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