summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp')
-rw-r--r--contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp240
1 files changed, 128 insertions, 112 deletions
diff --git a/contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp b/contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp
index f877f52..c7eec07 100644
--- a/contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp
+++ b/contrib/llvm/tools/lldb/source/Target/ThreadSpec.cpp
@@ -12,147 +12,163 @@
// Other libraries and framework includes
// Project includes
#include "lldb/Target/Thread.h"
+#include "lldb/Core/StructuredData.h"
#include "lldb/Target/ThreadSpec.h"
using namespace lldb;
using namespace lldb_private;
-ThreadSpec::ThreadSpec() :
- m_index (UINT32_MAX),
- m_tid (LLDB_INVALID_THREAD_ID),
- m_name(),
- m_queue_name ()
-{
+const char *ThreadSpec::g_option_names[static_cast<uint32_t>(
+ ThreadSpec::OptionNames::LastOptionName)]{"Index", "ID", "Name",
+ "QueueName"};
+
+ThreadSpec::ThreadSpec()
+ : m_index(UINT32_MAX), m_tid(LLDB_INVALID_THREAD_ID), m_name(),
+ m_queue_name() {}
+
+ThreadSpec::ThreadSpec(const ThreadSpec &rhs)
+ : m_index(rhs.m_index), m_tid(rhs.m_tid), m_name(rhs.m_name),
+ m_queue_name(rhs.m_queue_name) {}
+
+const ThreadSpec &ThreadSpec::operator=(const ThreadSpec &rhs) {
+ m_index = rhs.m_index;
+ m_tid = rhs.m_tid;
+ m_name = rhs.m_name;
+ m_queue_name = rhs.m_queue_name;
+ return *this;
}
-ThreadSpec::ThreadSpec(const ThreadSpec &rhs) :
- m_index(rhs.m_index),
- m_tid(rhs.m_tid),
- m_name(rhs.m_name),
- m_queue_name(rhs.m_queue_name)
-{
+std::unique_ptr<ThreadSpec> ThreadSpec::CreateFromStructuredData(
+ const StructuredData::Dictionary &spec_dict, Error &error) {
+ uint32_t index = UINT32_MAX;
+ lldb::tid_t tid = LLDB_INVALID_THREAD_ID;
+ std::string name;
+ std::string queue_name;
+
+ std::unique_ptr<ThreadSpec> thread_spec_up(new ThreadSpec());
+ bool success = spec_dict.GetValueForKeyAsInteger(
+ GetKey(OptionNames::ThreadIndex), index);
+ if (success)
+ thread_spec_up->SetIndex(index);
+
+ success =
+ spec_dict.GetValueForKeyAsInteger(GetKey(OptionNames::ThreadID), tid);
+ if (success)
+ thread_spec_up->SetTID(tid);
+
+ success =
+ spec_dict.GetValueForKeyAsString(GetKey(OptionNames::ThreadName), name);
+ if (success)
+ thread_spec_up->SetName(name.c_str());
+
+ success = spec_dict.GetValueForKeyAsString(GetKey(OptionNames::ThreadName),
+ queue_name);
+ if (success)
+ thread_spec_up->SetQueueName(queue_name.c_str());
+
+ return thread_spec_up;
}
-const ThreadSpec &
-ThreadSpec::operator=(const ThreadSpec &rhs)
-{
- m_index = rhs.m_index;
- m_tid = rhs.m_tid;
- m_name = rhs.m_name;
- m_queue_name = rhs.m_queue_name;
- return *this;
+StructuredData::ObjectSP ThreadSpec::SerializeToStructuredData() {
+ StructuredData::DictionarySP data_dict_sp(new StructuredData::Dictionary());
+
+ if (m_index != UINT32_MAX)
+ data_dict_sp->AddIntegerItem(GetKey(OptionNames::ThreadIndex), m_index);
+ if (m_tid != LLDB_INVALID_THREAD_ID)
+ data_dict_sp->AddIntegerItem(GetKey(OptionNames::ThreadID), m_tid);
+ if (!m_name.empty())
+ data_dict_sp->AddStringItem(GetKey(OptionNames::ThreadName), m_name);
+ if (!m_queue_name.empty())
+ data_dict_sp->AddStringItem(GetKey(OptionNames::QueueName), m_queue_name);
+
+ return data_dict_sp;
}
-const char *
-ThreadSpec::GetName () const
-{
- return m_name.empty() ? nullptr : m_name.c_str();
+const char *ThreadSpec::GetName() const {
+ return m_name.empty() ? nullptr : m_name.c_str();
}
-const char *
-ThreadSpec::GetQueueName () const
-{
- return m_queue_name.empty() ? nullptr : m_queue_name.c_str();
+const char *ThreadSpec::GetQueueName() const {
+ return m_queue_name.empty() ? nullptr : m_queue_name.c_str();
}
-bool
-ThreadSpec::TIDMatches (Thread &thread) const
-{
- if (m_tid == LLDB_INVALID_THREAD_ID)
- return true;
-
- lldb::tid_t thread_id = thread.GetID();
- return TIDMatches (thread_id);
+bool ThreadSpec::TIDMatches(Thread &thread) const {
+ if (m_tid == LLDB_INVALID_THREAD_ID)
+ return true;
+
+ lldb::tid_t thread_id = thread.GetID();
+ return TIDMatches(thread_id);
}
-bool
-ThreadSpec::IndexMatches (Thread &thread) const
-{
- if (m_index == UINT32_MAX)
- return true;
- uint32_t index = thread.GetIndexID();
- return IndexMatches (index);
+bool ThreadSpec::IndexMatches(Thread &thread) const {
+ if (m_index == UINT32_MAX)
+ return true;
+ uint32_t index = thread.GetIndexID();
+ return IndexMatches(index);
}
-bool
-ThreadSpec::NameMatches (Thread &thread) const
-{
- if (m_name.empty())
- return true;
-
- const char *name = thread.GetName();
- return NameMatches (name);
+bool ThreadSpec::NameMatches(Thread &thread) const {
+ if (m_name.empty())
+ return true;
+
+ const char *name = thread.GetName();
+ return NameMatches(name);
}
-bool
-ThreadSpec::QueueNameMatches (Thread &thread) const
-{
- if (m_queue_name.empty())
- return true;
-
- const char *queue_name = thread.GetQueueName();
- return QueueNameMatches (queue_name);
+bool ThreadSpec::QueueNameMatches(Thread &thread) const {
+ if (m_queue_name.empty())
+ return true;
+
+ const char *queue_name = thread.GetQueueName();
+ return QueueNameMatches(queue_name);
}
-bool
-ThreadSpec::ThreadPassesBasicTests (Thread &thread) const
-{
- if (!HasSpecification())
- return true;
-
- if (!TIDMatches(thread))
- return false;
-
- if (!IndexMatches(thread))
- return false;
-
- if (!NameMatches (thread))
- return false;
-
- if (!QueueNameMatches (thread))
- return false;
-
+bool ThreadSpec::ThreadPassesBasicTests(Thread &thread) const {
+ if (!HasSpecification())
return true;
+
+ if (!TIDMatches(thread))
+ return false;
+
+ if (!IndexMatches(thread))
+ return false;
+
+ if (!NameMatches(thread))
+ return false;
+
+ if (!QueueNameMatches(thread))
+ return false;
+
+ return true;
}
-bool
-ThreadSpec::HasSpecification() const
-{
- return (m_index != UINT32_MAX || m_tid != LLDB_INVALID_THREAD_ID || !m_name.empty() || !m_queue_name.empty());
+bool ThreadSpec::HasSpecification() const {
+ return (m_index != UINT32_MAX || m_tid != LLDB_INVALID_THREAD_ID ||
+ !m_name.empty() || !m_queue_name.empty());
}
-void
-ThreadSpec::GetDescription (Stream *s, lldb::DescriptionLevel level) const
-{
- if (!HasSpecification())
- {
- if (level == eDescriptionLevelBrief)
- {
- s->PutCString("thread spec: no ");
- }
+void ThreadSpec::GetDescription(Stream *s, lldb::DescriptionLevel level) const {
+ if (!HasSpecification()) {
+ if (level == eDescriptionLevelBrief) {
+ s->PutCString("thread spec: no ");
}
- else
- {
- if (level == eDescriptionLevelBrief)
- {
- s->PutCString("thread spec: yes ");
- }
- else
- {
- if (GetTID() != LLDB_INVALID_THREAD_ID)
- s->Printf("tid: 0x%" PRIx64 " ", GetTID());
-
- if (GetIndex() != UINT32_MAX)
- s->Printf("index: %d ", GetIndex());
-
- const char *name = GetName();
- if (name)
- s->Printf ("thread name: \"%s\" ", name);
-
- const char *queue_name = GetQueueName();
- if (queue_name)
- s->Printf ("queue name: \"%s\" ", queue_name);
- }
+ } else {
+ if (level == eDescriptionLevelBrief) {
+ s->PutCString("thread spec: yes ");
+ } else {
+ if (GetTID() != LLDB_INVALID_THREAD_ID)
+ s->Printf("tid: 0x%" PRIx64 " ", GetTID());
+
+ if (GetIndex() != UINT32_MAX)
+ s->Printf("index: %d ", GetIndex());
+
+ const char *name = GetName();
+ if (name)
+ s->Printf("thread name: \"%s\" ", name);
+ const char *queue_name = GetQueueName();
+ if (queue_name)
+ s->Printf("queue name: \"%s\" ", queue_name);
}
+ }
}
OpenPOWER on IntegriCloud