11b54c88cSJim Ingham //===-- ThreadSpec.cpp ----------------------------------------------*- C++ -*-===// 21b54c88cSJim Ingham // 31b54c88cSJim Ingham // The LLVM Compiler Infrastructure 41b54c88cSJim Ingham // 51b54c88cSJim Ingham // This file is distributed under the University of Illinois Open Source 61b54c88cSJim Ingham // License. See LICENSE.TXT for details. 71b54c88cSJim Ingham // 81b54c88cSJim Ingham //===----------------------------------------------------------------------===// 91b54c88cSJim Ingham 101b54c88cSJim Ingham #include "lldb/Target/Thread.h" 111b54c88cSJim Ingham #include "lldb/Target/ThreadSpec.h" 121b54c88cSJim Ingham 131b54c88cSJim Ingham using namespace lldb; 141b54c88cSJim Ingham using namespace lldb_private; 151b54c88cSJim Ingham 161b54c88cSJim Ingham ThreadSpec::ThreadSpec() : 171b54c88cSJim Ingham m_index (-1), 181b54c88cSJim Ingham m_tid (LLDB_INVALID_THREAD_ID), 191b54c88cSJim Ingham m_name(), 201b54c88cSJim Ingham m_queue_name () 211b54c88cSJim Ingham { 221b54c88cSJim Ingham } 231b54c88cSJim Ingham 241b54c88cSJim Ingham ThreadSpec::ThreadSpec (const ThreadSpec &rhs) : 251b54c88cSJim Ingham m_index(rhs.m_index), 261b54c88cSJim Ingham m_tid(rhs.m_tid), 271b54c88cSJim Ingham m_name(rhs.m_name), 281b54c88cSJim Ingham m_queue_name(rhs.m_queue_name) 291b54c88cSJim Ingham { 301b54c88cSJim Ingham } 311b54c88cSJim Ingham 321b54c88cSJim Ingham const ThreadSpec & 331b54c88cSJim Ingham ThreadSpec::operator=(const ThreadSpec &rhs) 341b54c88cSJim Ingham { 351b54c88cSJim Ingham m_index = rhs.m_index; 361b54c88cSJim Ingham m_tid = rhs.m_tid; 371b54c88cSJim Ingham m_name = rhs.m_name; 381b54c88cSJim Ingham m_queue_name = rhs.m_queue_name; 391b54c88cSJim Ingham return *this; 401b54c88cSJim Ingham } 411b54c88cSJim Ingham 421b54c88cSJim Ingham const char * 431b54c88cSJim Ingham ThreadSpec::GetName () const 441b54c88cSJim Ingham { 451b54c88cSJim Ingham if (m_name.empty()) 461b54c88cSJim Ingham return NULL; 471b54c88cSJim Ingham else 481b54c88cSJim Ingham return m_name.c_str(); 491b54c88cSJim Ingham } 501b54c88cSJim Ingham 511b54c88cSJim Ingham const char * 521b54c88cSJim Ingham ThreadSpec::GetQueueName () const 531b54c88cSJim Ingham { 541b54c88cSJim Ingham if (m_queue_name.empty()) 551b54c88cSJim Ingham return NULL; 561b54c88cSJim Ingham else 571b54c88cSJim Ingham return m_queue_name.c_str(); 581b54c88cSJim Ingham } 59*0136309fSJim Ingham 60*0136309fSJim Ingham bool 61*0136309fSJim Ingham ThreadSpec::ThreadPassesBasicTests (Thread *thread) const 62*0136309fSJim Ingham { 63*0136309fSJim Ingham 64*0136309fSJim Ingham if (!HasSpecification()) 65*0136309fSJim Ingham return true; 66*0136309fSJim Ingham 67*0136309fSJim Ingham if (!TIDMatches(thread->GetID())) 68*0136309fSJim Ingham return false; 69*0136309fSJim Ingham 70*0136309fSJim Ingham if (!IndexMatches(thread->GetIndexID())) 71*0136309fSJim Ingham return false; 72*0136309fSJim Ingham 73*0136309fSJim Ingham if (!NameMatches (thread->GetName())) 74*0136309fSJim Ingham return false; 75*0136309fSJim Ingham 76*0136309fSJim Ingham if (!QueueNameMatches (thread->GetQueueName())) 77*0136309fSJim Ingham return false; 78*0136309fSJim Ingham 79*0136309fSJim Ingham return true; 80*0136309fSJim Ingham 81*0136309fSJim Ingham } 82*0136309fSJim Ingham 83*0136309fSJim Ingham bool 84*0136309fSJim Ingham ThreadSpec::HasSpecification() const 85*0136309fSJim Ingham { 86*0136309fSJim Ingham return (m_index != -1 || m_tid != LLDB_INVALID_THREAD_ID || !m_name.empty() || !m_queue_name.empty()); 87*0136309fSJim Ingham } 88*0136309fSJim Ingham void 89*0136309fSJim Ingham ThreadSpec::GetDescription (Stream *s, lldb::DescriptionLevel level) const 90*0136309fSJim Ingham { 91*0136309fSJim Ingham if (!HasSpecification()) 92*0136309fSJim Ingham { 93*0136309fSJim Ingham if (level == eDescriptionLevelBrief) 94*0136309fSJim Ingham { 95*0136309fSJim Ingham s->PutCString("thread spec: no "); 96*0136309fSJim Ingham } 97*0136309fSJim Ingham } 98*0136309fSJim Ingham else 99*0136309fSJim Ingham { 100*0136309fSJim Ingham if (level == eDescriptionLevelBrief) 101*0136309fSJim Ingham { 102*0136309fSJim Ingham s->PutCString("thread spec: yes "); 103*0136309fSJim Ingham } 104*0136309fSJim Ingham else 105*0136309fSJim Ingham { 106*0136309fSJim Ingham if (GetTID() != LLDB_INVALID_THREAD_ID) 107*0136309fSJim Ingham s->Printf("tid: 0x%llx ", GetTID()); 108*0136309fSJim Ingham 109*0136309fSJim Ingham if (GetIndex() != -1) 110*0136309fSJim Ingham s->Printf("index: %d ", GetIndex()); 111*0136309fSJim Ingham 112*0136309fSJim Ingham const char *name = GetName(); 113*0136309fSJim Ingham if (name) 114*0136309fSJim Ingham s->Printf ("thread name: \"%s\" ", name); 115*0136309fSJim Ingham 116*0136309fSJim Ingham const char *queue_name = GetQueueName(); 117*0136309fSJim Ingham if (queue_name) 118*0136309fSJim Ingham s->Printf ("queue name: \"%s\" ", queue_name); 119*0136309fSJim Ingham } 120*0136309fSJim Ingham 121*0136309fSJim Ingham } 122*0136309fSJim Ingham } 123