xref: /src/contrib/llvm-project/lldb/source/API/SBStringList.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1cfca06d7SDimitry Andric //===-- SBStringList.cpp --------------------------------------------------===//
2f034231aSEd Maste //
35f29bb8aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f29bb8aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f29bb8aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f034231aSEd Maste //
7f034231aSEd Maste //===----------------------------------------------------------------------===//
8f034231aSEd Maste 
9f034231aSEd Maste #include "lldb/API/SBStringList.h"
105f29bb8aSDimitry Andric #include "Utils.h"
116f8fc217SDimitry Andric #include "lldb/Utility/Instrumentation.h"
1274a628f7SDimitry Andric #include "lldb/Utility/StringList.h"
13f034231aSEd Maste 
14f034231aSEd Maste using namespace lldb;
15f034231aSEd Maste using namespace lldb_private;
16f034231aSEd Maste 
SBStringList()176f8fc217SDimitry Andric SBStringList::SBStringList() { LLDB_INSTRUMENT_VA(this); }
18f034231aSEd Maste 
SBStringList(const lldb_private::StringList * lldb_strings_ptr)196f8fc217SDimitry Andric SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr) {
205f29bb8aSDimitry Andric   if (lldb_strings_ptr)
21ead24645SDimitry Andric     m_opaque_up = std::make_unique<StringList>(*lldb_strings_ptr);
225f29bb8aSDimitry Andric }
235f29bb8aSDimitry Andric 
SBStringList(const SBStringList & rhs)246f8fc217SDimitry Andric SBStringList::SBStringList(const SBStringList &rhs) {
256f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
265f29bb8aSDimitry Andric 
275f29bb8aSDimitry Andric   m_opaque_up = clone(rhs.m_opaque_up);
28f034231aSEd Maste }
29f034231aSEd Maste 
operator =(const SBStringList & rhs)3014f1b3e8SDimitry Andric const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
316f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
325f29bb8aSDimitry Andric 
335f29bb8aSDimitry Andric   if (this != &rhs)
345f29bb8aSDimitry Andric     m_opaque_up = clone(rhs.m_opaque_up);
356f8fc217SDimitry Andric   return *this;
36f034231aSEd Maste }
37f034231aSEd Maste 
38cfca06d7SDimitry Andric SBStringList::~SBStringList() = default;
39f034231aSEd Maste 
operator ->()407fa27ce4SDimitry Andric lldb_private::StringList *SBStringList::operator->() {
417fa27ce4SDimitry Andric   if (!IsValid())
427fa27ce4SDimitry Andric     m_opaque_up = std::make_unique<lldb_private::StringList>();
437fa27ce4SDimitry Andric 
447fa27ce4SDimitry Andric   return m_opaque_up.get();
457fa27ce4SDimitry Andric }
467fa27ce4SDimitry Andric 
operator ->() const4714f1b3e8SDimitry Andric const lldb_private::StringList *SBStringList::operator->() const {
485f29bb8aSDimitry Andric   return m_opaque_up.get();
49f034231aSEd Maste }
50f034231aSEd Maste 
operator *() const5114f1b3e8SDimitry Andric const lldb_private::StringList &SBStringList::operator*() const {
525f29bb8aSDimitry Andric   return *m_opaque_up;
53f034231aSEd Maste }
54f034231aSEd Maste 
IsValid() const555f29bb8aSDimitry Andric bool SBStringList::IsValid() const {
566f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
575f29bb8aSDimitry Andric   return this->operator bool();
585f29bb8aSDimitry Andric }
operator bool() const595f29bb8aSDimitry Andric SBStringList::operator bool() const {
606f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
615f29bb8aSDimitry Andric 
625f29bb8aSDimitry Andric   return (m_opaque_up != nullptr);
635f29bb8aSDimitry Andric }
64f034231aSEd Maste 
AppendString(const char * str)6514f1b3e8SDimitry Andric void SBStringList::AppendString(const char *str) {
666f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, str);
675f29bb8aSDimitry Andric 
685f29bb8aSDimitry Andric   if (str != nullptr) {
69f034231aSEd Maste     if (IsValid())
705f29bb8aSDimitry Andric       m_opaque_up->AppendString(str);
71f034231aSEd Maste     else
72cfca06d7SDimitry Andric       m_opaque_up = std::make_unique<lldb_private::StringList>(str);
73f034231aSEd Maste   }
74f034231aSEd Maste }
75f034231aSEd Maste 
AppendList(const char ** strv,int strc)7614f1b3e8SDimitry Andric void SBStringList::AppendList(const char **strv, int strc) {
776f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, strv, strc);
785f29bb8aSDimitry Andric 
795f29bb8aSDimitry Andric   if ((strv != nullptr) && (strc > 0)) {
80f034231aSEd Maste     if (IsValid())
815f29bb8aSDimitry Andric       m_opaque_up->AppendList(strv, strc);
82f034231aSEd Maste     else
83cfca06d7SDimitry Andric       m_opaque_up = std::make_unique<lldb_private::StringList>(strv, strc);
84f034231aSEd Maste   }
85f034231aSEd Maste }
86f034231aSEd Maste 
AppendList(const SBStringList & strings)8714f1b3e8SDimitry Andric void SBStringList::AppendList(const SBStringList &strings) {
886f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, strings);
895f29bb8aSDimitry Andric 
9014f1b3e8SDimitry Andric   if (strings.IsValid()) {
91f034231aSEd Maste     if (!IsValid())
92cfca06d7SDimitry Andric       m_opaque_up = std::make_unique<lldb_private::StringList>();
935f29bb8aSDimitry Andric     m_opaque_up->AppendList(*(strings.m_opaque_up));
94f034231aSEd Maste   }
95f034231aSEd Maste }
96f034231aSEd Maste 
AppendList(const StringList & strings)9714f1b3e8SDimitry Andric void SBStringList::AppendList(const StringList &strings) {
9814f1b3e8SDimitry Andric   if (!IsValid())
99cfca06d7SDimitry Andric     m_opaque_up = std::make_unique<lldb_private::StringList>();
1005f29bb8aSDimitry Andric   m_opaque_up->AppendList(strings);
10114f1b3e8SDimitry Andric }
10214f1b3e8SDimitry Andric 
GetSize() const10314f1b3e8SDimitry Andric uint32_t SBStringList::GetSize() const {
1046f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1055f29bb8aSDimitry Andric 
10614f1b3e8SDimitry Andric   if (IsValid()) {
1075f29bb8aSDimitry Andric     return m_opaque_up->GetSize();
108f034231aSEd Maste   }
109f034231aSEd Maste   return 0;
110f034231aSEd Maste }
111f034231aSEd Maste 
GetStringAtIndex(size_t idx)11214f1b3e8SDimitry Andric const char *SBStringList::GetStringAtIndex(size_t idx) {
1136f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, idx);
1145f29bb8aSDimitry Andric 
11514f1b3e8SDimitry Andric   if (IsValid()) {
1167fa27ce4SDimitry Andric     return ConstString(m_opaque_up->GetStringAtIndex(idx)).GetCString();
117f034231aSEd Maste   }
1185f29bb8aSDimitry Andric   return nullptr;
119f034231aSEd Maste }
120f034231aSEd Maste 
GetStringAtIndex(size_t idx) const12114f1b3e8SDimitry Andric const char *SBStringList::GetStringAtIndex(size_t idx) const {
1226f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, idx);
1235f29bb8aSDimitry Andric 
12414f1b3e8SDimitry Andric   if (IsValid()) {
1257fa27ce4SDimitry Andric     return ConstString(m_opaque_up->GetStringAtIndex(idx)).GetCString();
126f3fbd1c0SDimitry Andric   }
1275f29bb8aSDimitry Andric   return nullptr;
128f3fbd1c0SDimitry Andric }
129f3fbd1c0SDimitry Andric 
Clear()13014f1b3e8SDimitry Andric void SBStringList::Clear() {
1316f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1325f29bb8aSDimitry Andric 
13314f1b3e8SDimitry Andric   if (IsValid()) {
1345f29bb8aSDimitry Andric     m_opaque_up->Clear();
1355f29bb8aSDimitry Andric   }
1365f29bb8aSDimitry Andric }
137