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*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h" 11bd4bf82aSJonas Devlieghere #include "Utils.h" 12573ab909SZachary Turner #include "lldb/Utility/StringList.h" 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner using namespace lldb; 1530fdc8d8SChris Lattner using namespace lldb_private; 1630fdc8d8SChris Lattner 17*baf5664fSJonas Devlieghere SBStringList::SBStringList() : m_opaque_up() { 18*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBStringList); 19*baf5664fSJonas Devlieghere } 2030fdc8d8SChris Lattner 21b9c1b51eSKate Stone SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr) 22d5b44036SJonas Devlieghere : m_opaque_up() { 2330fdc8d8SChris Lattner if (lldb_strings_ptr) 24bd4bf82aSJonas Devlieghere m_opaque_up = llvm::make_unique<StringList>(*lldb_strings_ptr); 2530fdc8d8SChris Lattner } 2630fdc8d8SChris Lattner 27d5b44036SJonas Devlieghere SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_up() { 28*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBStringList, (const lldb::SBStringList &), rhs); 29*baf5664fSJonas Devlieghere 30bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 33b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) { 34*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBStringList &, 35*baf5664fSJonas Devlieghere SBStringList, operator=,(const lldb::SBStringList &), rhs); 36*baf5664fSJonas Devlieghere 37bd4bf82aSJonas Devlieghere if (this != &rhs) 38bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 3930fdc8d8SChris Lattner return *this; 4030fdc8d8SChris Lattner } 4130fdc8d8SChris Lattner 42b9c1b51eSKate Stone SBStringList::~SBStringList() {} 43efabb123SGreg Clayton 44b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const { 45d5b44036SJonas Devlieghere return m_opaque_up.get(); 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 48b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const { 49d5b44036SJonas Devlieghere return *m_opaque_up; 5030fdc8d8SChris Lattner } 5130fdc8d8SChris Lattner 52*baf5664fSJonas Devlieghere bool SBStringList::IsValid() const { 53*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBStringList, IsValid); 54*baf5664fSJonas Devlieghere 55*baf5664fSJonas Devlieghere return (m_opaque_up != NULL); 56*baf5664fSJonas Devlieghere } 5730fdc8d8SChris Lattner 58b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) { 59*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendString, (const char *), str); 60*baf5664fSJonas Devlieghere 61b9c1b51eSKate Stone if (str != NULL) { 6230fdc8d8SChris Lattner if (IsValid()) 63d5b44036SJonas Devlieghere m_opaque_up->AppendString(str); 6430fdc8d8SChris Lattner else 65d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList(str)); 6630fdc8d8SChris Lattner } 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner 69b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) { 70*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, (const char **, int), strv, 71*baf5664fSJonas Devlieghere strc); 72*baf5664fSJonas Devlieghere 73b9c1b51eSKate Stone if ((strv != NULL) && (strc > 0)) { 7430fdc8d8SChris Lattner if (IsValid()) 75d5b44036SJonas Devlieghere m_opaque_up->AppendList(strv, strc); 7630fdc8d8SChris Lattner else 77d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList(strv, strc)); 7830fdc8d8SChris Lattner } 7930fdc8d8SChris Lattner } 8030fdc8d8SChris Lattner 81b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) { 82*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, 83*baf5664fSJonas Devlieghere (const lldb::SBStringList &), strings); 84*baf5664fSJonas Devlieghere 85b9c1b51eSKate Stone if (strings.IsValid()) { 8630fdc8d8SChris Lattner if (!IsValid()) 87d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList()); 88d5b44036SJonas Devlieghere m_opaque_up->AppendList(*(strings.m_opaque_up)); 8930fdc8d8SChris Lattner } 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner 9292d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) { 9392d1960eSJim Ingham if (!IsValid()) 94d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList()); 95d5b44036SJonas Devlieghere m_opaque_up->AppendList(strings); 9692d1960eSJim Ingham } 9792d1960eSJim Ingham 98b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const { 99*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBStringList, GetSize); 100*baf5664fSJonas Devlieghere 101b9c1b51eSKate Stone if (IsValid()) { 102d5b44036SJonas Devlieghere return m_opaque_up->GetSize(); 10330fdc8d8SChris Lattner } 10430fdc8d8SChris Lattner return 0; 10530fdc8d8SChris Lattner } 10630fdc8d8SChris Lattner 107b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) { 108*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const char *, SBStringList, GetStringAtIndex, (size_t), 109*baf5664fSJonas Devlieghere idx); 110*baf5664fSJonas Devlieghere 111b9c1b51eSKate Stone if (IsValid()) { 112d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 11330fdc8d8SChris Lattner } 11430fdc8d8SChris Lattner return NULL; 11530fdc8d8SChris Lattner } 11630fdc8d8SChris Lattner 117b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const { 118*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBStringList, GetStringAtIndex, 119*baf5664fSJonas Devlieghere (size_t), idx); 120*baf5664fSJonas Devlieghere 121b9c1b51eSKate Stone if (IsValid()) { 122d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 12376bb8d67SJim Ingham } 12476bb8d67SJim Ingham return NULL; 12576bb8d67SJim Ingham } 12676bb8d67SJim Ingham 127b9c1b51eSKate Stone void SBStringList::Clear() { 128*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBStringList, Clear); 129*baf5664fSJonas Devlieghere 130b9c1b51eSKate Stone if (IsValid()) { 131d5b44036SJonas Devlieghere m_opaque_up->Clear(); 13230fdc8d8SChris Lattner } 13330fdc8d8SChris Lattner } 134