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" 10baf5664fSJonas 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 17baf5664fSJonas Devlieghere SBStringList::SBStringList() : m_opaque_up() { 18baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBStringList); 19baf5664fSJonas 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() { 28baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBStringList, (const lldb::SBStringList &), rhs); 29baf5664fSJonas Devlieghere 30bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 33b9c1b51eSKate Stone const SBStringList &SBStringList::operator=(const SBStringList &rhs) { 34baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBStringList &, 35baf5664fSJonas Devlieghere SBStringList, operator=,(const lldb::SBStringList &), rhs); 36baf5664fSJonas 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 52baf5664fSJonas Devlieghere bool SBStringList::IsValid() const { 53baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBStringList, IsValid); 547f5237bcSPavel Labath return this->operator bool(); 557f5237bcSPavel Labath } 567f5237bcSPavel Labath SBStringList::operator bool() const { 577f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBStringList, operator bool); 58baf5664fSJonas Devlieghere 59baf5664fSJonas Devlieghere return (m_opaque_up != NULL); 60baf5664fSJonas Devlieghere } 6130fdc8d8SChris Lattner 62b9c1b51eSKate Stone void SBStringList::AppendString(const char *str) { 63baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendString, (const char *), str); 64baf5664fSJonas Devlieghere 65b9c1b51eSKate Stone if (str != NULL) { 6630fdc8d8SChris Lattner if (IsValid()) 67d5b44036SJonas Devlieghere m_opaque_up->AppendString(str); 6830fdc8d8SChris Lattner else 69d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList(str)); 7030fdc8d8SChris Lattner } 7130fdc8d8SChris Lattner } 7230fdc8d8SChris Lattner 73b9c1b51eSKate Stone void SBStringList::AppendList(const char **strv, int strc) { 74baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, (const char **, int), strv, 75baf5664fSJonas Devlieghere strc); 76baf5664fSJonas Devlieghere 77b9c1b51eSKate Stone if ((strv != NULL) && (strc > 0)) { 7830fdc8d8SChris Lattner if (IsValid()) 79d5b44036SJonas Devlieghere m_opaque_up->AppendList(strv, strc); 8030fdc8d8SChris Lattner else 81d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList(strv, strc)); 8230fdc8d8SChris Lattner } 8330fdc8d8SChris Lattner } 8430fdc8d8SChris Lattner 85b9c1b51eSKate Stone void SBStringList::AppendList(const SBStringList &strings) { 86baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBStringList, AppendList, 87baf5664fSJonas Devlieghere (const lldb::SBStringList &), strings); 88baf5664fSJonas Devlieghere 89b9c1b51eSKate Stone if (strings.IsValid()) { 9030fdc8d8SChris Lattner if (!IsValid()) 91d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList()); 92d5b44036SJonas Devlieghere m_opaque_up->AppendList(*(strings.m_opaque_up)); 9330fdc8d8SChris Lattner } 9430fdc8d8SChris Lattner } 9530fdc8d8SChris Lattner 9692d1960eSJim Ingham void SBStringList::AppendList(const StringList &strings) { 9792d1960eSJim Ingham if (!IsValid()) 98d5b44036SJonas Devlieghere m_opaque_up.reset(new lldb_private::StringList()); 99d5b44036SJonas Devlieghere m_opaque_up->AppendList(strings); 10092d1960eSJim Ingham } 10192d1960eSJim Ingham 102b9c1b51eSKate Stone uint32_t SBStringList::GetSize() const { 103baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBStringList, GetSize); 104baf5664fSJonas Devlieghere 105b9c1b51eSKate Stone if (IsValid()) { 106d5b44036SJonas Devlieghere return m_opaque_up->GetSize(); 10730fdc8d8SChris Lattner } 10830fdc8d8SChris Lattner return 0; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 111b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) { 112baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const char *, SBStringList, GetStringAtIndex, (size_t), 113baf5664fSJonas Devlieghere idx); 114baf5664fSJonas Devlieghere 115b9c1b51eSKate Stone if (IsValid()) { 116d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 11730fdc8d8SChris Lattner } 11830fdc8d8SChris Lattner return NULL; 11930fdc8d8SChris Lattner } 12030fdc8d8SChris Lattner 121b9c1b51eSKate Stone const char *SBStringList::GetStringAtIndex(size_t idx) const { 122baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBStringList, GetStringAtIndex, 123baf5664fSJonas Devlieghere (size_t), idx); 124baf5664fSJonas Devlieghere 125b9c1b51eSKate Stone if (IsValid()) { 126d5b44036SJonas Devlieghere return m_opaque_up->GetStringAtIndex(idx); 12776bb8d67SJim Ingham } 12876bb8d67SJim Ingham return NULL; 12976bb8d67SJim Ingham } 13076bb8d67SJim Ingham 131b9c1b51eSKate Stone void SBStringList::Clear() { 132baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBStringList, Clear); 133baf5664fSJonas Devlieghere 134b9c1b51eSKate Stone if (IsValid()) { 135d5b44036SJonas Devlieghere m_opaque_up->Clear(); 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner } 138*ae211eceSMichal Gorny 139*ae211eceSMichal Gorny namespace lldb_private { 140*ae211eceSMichal Gorny namespace repro { 141*ae211eceSMichal Gorny 142*ae211eceSMichal Gorny template <> 143*ae211eceSMichal Gorny void RegisterMethods<SBStringList>(Registry &R) { 144*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBStringList, ()); 145*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBStringList, (const lldb::SBStringList &)); 146*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const lldb::SBStringList &, 147*ae211eceSMichal Gorny SBStringList, operator=,(const lldb::SBStringList &)); 148*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBStringList, IsValid, ()); 149*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBStringList, operator bool, ()); 150*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBStringList, AppendString, (const char *)); 151*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBStringList, AppendList, (const char **, int)); 152*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBStringList, AppendList, 153*ae211eceSMichal Gorny (const lldb::SBStringList &)); 154*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(uint32_t, SBStringList, GetSize, ()); 155*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBStringList, GetStringAtIndex, 156*ae211eceSMichal Gorny (size_t)); 157*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBStringList, GetStringAtIndex, 158*ae211eceSMichal Gorny (size_t)); 159*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBStringList, Clear, ()); 160*ae211eceSMichal Gorny } 161*ae211eceSMichal Gorny 162*ae211eceSMichal Gorny } 163*ae211eceSMichal Gorny } 164