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" 10d51402acSJonas Devlieghere #include "lldb/Utility/ReproducerInstrumentation.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 17a3436f73SKazu Hirata SBStringList::SBStringList() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBStringList); } 1830fdc8d8SChris Lattner 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 24a3436f73SKazu Hirata SBStringList::SBStringList(const SBStringList &rhs) { 25baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBStringList, (const lldb::SBStringList &), rhs); 26baf5664fSJonas Devlieghere 27bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 2830fdc8d8SChris Lattner } 2930fdc8d8SChris Lattner 30b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) { 31baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBStringList &, 32baf5664fSJonas Devlieghere SBStringList, operator=,(const lldb::SBStringList &), rhs); 33baf5664fSJonas Devlieghere 34bd4bf82aSJonas Devlieghere if (this != &rhs) 35bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 36*d232abc3SJonas Devlieghere return *this; 3730fdc8d8SChris Lattner } 3830fdc8d8SChris Lattner 39866b7a65SJonas Devlieghere SBStringList::~SBStringList() = default; 40efabb123SGreg Clayton 41b9c1b51eSKate Stone const lldb_private::StringList *SBStringList::operator->() const { 42d5b44036SJonas Devlieghere return m_opaque_up.get(); 4330fdc8d8SChris Lattner } 4430fdc8d8SChris Lattner 45b9c1b51eSKate Stone const lldb_private::StringList &SBStringList::operator*() const { 46d5b44036SJonas Devlieghere return *m_opaque_up; 4730fdc8d8SChris Lattner } 4830fdc8d8SChris Lattner 49baf5664fSJonas Devlieghere bool SBStringList::IsValid() const { 50baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBStringList, IsValid); 517f5237bcSPavel Labath return this->operator bool(); 527f5237bcSPavel Labath } 537f5237bcSPavel Labath SBStringList::operator bool() const { 547f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBStringList, operator bool); 55baf5664fSJonas Devlieghere 56248a1305SKonrad Kleine return (m_opaque_up != nullptr); 57baf5664fSJonas Devlieghere } 5830fdc8d8SChris Lattner 59b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) { 60baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendString, (const char *), str); 61baf5664fSJonas Devlieghere 62248a1305SKonrad Kleine if (str != nullptr) { 6330fdc8d8SChris Lattner if (IsValid()) 64d5b44036SJonas Devlieghere m_opaque_up->AppendString(str); 6530fdc8d8SChris Lattner else 661c0bbe43SJonas Devlieghere m_opaque_up = std::make_unique<lldb_private::StringList>(str); 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner } 6930fdc8d8SChris Lattner 70b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) { 71baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, (const char **, int), strv, 72baf5664fSJonas Devlieghere strc); 73baf5664fSJonas Devlieghere 74248a1305SKonrad Kleine if ((strv != nullptr) && (strc > 0)) { 7530fdc8d8SChris Lattner if (IsValid()) 76d5b44036SJonas Devlieghere m_opaque_up->AppendList(strv, strc); 7730fdc8d8SChris Lattner else 781c0bbe43SJonas Devlieghere m_opaque_up = std::make_unique<lldb_private::StringList>(strv, strc); 7930fdc8d8SChris Lattner } 8030fdc8d8SChris Lattner } 8130fdc8d8SChris Lattner 82b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) { 83baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, 84baf5664fSJonas Devlieghere (const lldb::SBStringList &), strings); 85baf5664fSJonas Devlieghere 86b9c1b51eSKate Stone if (strings.IsValid()) { 8730fdc8d8SChris Lattner if (!IsValid()) 881c0bbe43SJonas Devlieghere m_opaque_up = std::make_unique<lldb_private::StringList>(); 89d5b44036SJonas Devlieghere m_opaque_up->AppendList(*(strings.m_opaque_up)); 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner } 9230fdc8d8SChris Lattner 9392d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) { 9492d1960eSJim Ingham if (!IsValid()) 951c0bbe43SJonas Devlieghere m_opaque_up = std::make_unique<lldb_private::StringList>(); 96d5b44036SJonas Devlieghere m_opaque_up->AppendList(strings); 9792d1960eSJim Ingham } 9892d1960eSJim Ingham 99b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const { 100baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBStringList, GetSize); 101baf5664fSJonas Devlieghere 102b9c1b51eSKate Stone if (IsValid()) { 103d5b44036SJonas Devlieghere return m_opaque_up->GetSize(); 10430fdc8d8SChris Lattner } 10530fdc8d8SChris Lattner return 0; 10630fdc8d8SChris Lattner } 10730fdc8d8SChris Lattner 108b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) { 109baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const char *, SBStringList, GetStringAtIndex, (size_t), 110baf5664fSJonas Devlieghere idx); 111baf5664fSJonas Devlieghere 112b9c1b51eSKate Stone if (IsValid()) { 113d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 11430fdc8d8SChris Lattner } 115248a1305SKonrad Kleine return nullptr; 11630fdc8d8SChris Lattner } 11730fdc8d8SChris Lattner 118b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const { 119baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBStringList, GetStringAtIndex, 120baf5664fSJonas Devlieghere (size_t), idx); 121baf5664fSJonas Devlieghere 122b9c1b51eSKate Stone if (IsValid()) { 123d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 12476bb8d67SJim Ingham } 125248a1305SKonrad Kleine return nullptr; 12676bb8d67SJim Ingham } 12776bb8d67SJim Ingham 128b9c1b51eSKate Stone void SBStringList::Clear() { 129baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBStringList, Clear); 130baf5664fSJonas Devlieghere 131b9c1b51eSKate Stone if (IsValid()) { 132d5b44036SJonas Devlieghere m_opaque_up->Clear(); 13330fdc8d8SChris Lattner } 13430fdc8d8SChris Lattner } 135