ThreadSpec.h revision 3c7b5b9f83cae58ca366db2bba37dc09485f7dcc
1ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com//===-- ThreadSpec.h ------------------------------------------------*- C++ -*-===// 2ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// 3ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// The LLVM Compiler Infrastructure 4ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// 5ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// This file is distributed under the University of Illinois Open Source 6ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// License. See LICENSE.TXT for details. 7ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// 8ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com//===----------------------------------------------------------------------===// 9ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 10ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com#ifndef liblldb_ThreadSpec_h_ 11ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com#define liblldb_ThreadSpec_h_ 12c26d94fd7dc0b00cd6d0e42d28285f4a38aff021bsalomon@google.com 13ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com#include <map> 14ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com#include <string> 155f74cf8c49701f514b69dc6f1a8b5c0ffd78af0asugoi@google.com 16ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com#include "lldb/lldb-private.h" 17ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 1849f085dddff10473b6ebf832a974288300224e60bsalomonnamespace lldb_private { 1949f085dddff10473b6ebf832a974288300224e60bsalomon 20c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org// Note: For now the thread spec has only fixed elements - 21c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com// Thread ID 22ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// Thread Index 23ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// Thread Name 24ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// Thread Queue Name 25ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// 26ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// But if we need more generality, we can hang a key/value map off of this structure. 27ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// That's why the thread matches spec test is done as a virtual method in Thread::MatchesSpec, 28c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org// since it is the native thread that would know how to interpret the keys. 29ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// I was going to do the Queue Name this way out of sheer orneriness, but that seems a 30ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com// sufficiently general concept, so I put it in here on its own. 31ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 32ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.comclass ThreadSpec 33ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com{ 34ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.compublic: 35ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com ThreadSpec (); 36ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 37e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com ThreadSpec (const ThreadSpec &rhs); 38e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com 39ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com const ThreadSpec & 40ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com operator=(const ThreadSpec &rhs); 4132184d81629e39809bb9e915286d8fe971a8ed68commit-bot@chromium.org 42ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com void 4349f085dddff10473b6ebf832a974288300224e60bsalomon SetIndex (uint32_t index) 44ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com { 45ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com m_index = index; 46ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com } 4745a15f551b5b3c6c747d8eaf6466b7d3b76a8faebsalomon@google.com 48e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com void 495f74cf8c49701f514b69dc6f1a8b5c0ffd78af0asugoi@google.com SetTID (lldb::tid_t tid) 5045a15f551b5b3c6c747d8eaf6466b7d3b76a8faebsalomon@google.com { 5145a15f551b5b3c6c747d8eaf6466b7d3b76a8faebsalomon@google.com m_tid = tid; 52ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com } 53ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 544e205b10799730b887ae5d6ac7207570292c177fcdalton void 554e205b10799730b887ae5d6ac7207570292c177fcdalton SetName (const char *name) 564e205b10799730b887ae5d6ac7207570292c177fcdalton { 574e205b10799730b887ae5d6ac7207570292c177fcdalton m_name = name; 584e205b10799730b887ae5d6ac7207570292c177fcdalton } 594e205b10799730b887ae5d6ac7207570292c177fcdalton 604e205b10799730b887ae5d6ac7207570292c177fcdalton void 614e205b10799730b887ae5d6ac7207570292c177fcdalton SetQueueName (const char *queue_name) 624e205b10799730b887ae5d6ac7207570292c177fcdalton { 634e205b10799730b887ae5d6ac7207570292c177fcdalton m_queue_name = queue_name; 644e205b10799730b887ae5d6ac7207570292c177fcdalton } 65e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com 66e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com uint32_t 6745a15f551b5b3c6c747d8eaf6466b7d3b76a8faebsalomon@google.com GetIndex () const 68e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com { 694e205b10799730b887ae5d6ac7207570292c177fcdalton return m_index; 70e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com } 71ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 72ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com lldb::tid_t 73e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com GetTID () const 74e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com { 75ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com return m_tid; 760f11e1ab5b6e53f6176dde2dbb25a8e3ae34858fbsalomon@google.com } 77f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org 78f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org const char * 79ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com GetName () const; 80ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 81f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org const char * 82ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com GetQueueName () const; 834e205b10799730b887ae5d6ac7207570292c177fcdalton 840f11e1ab5b6e53f6176dde2dbb25a8e3ae34858fbsalomon@google.com bool 856803c219dd3be4a73e7bb5c4bb8a5b1f803624d0commit-bot@chromium.org TIDMatches (lldb::tid_t thread_id) const 86ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com { 87ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com if (m_tid == LLDB_INVALID_THREAD_ID || thread_id == LLDB_INVALID_THREAD_ID) 88ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com return true; 8905a718c9d2302b08f859adac5854b2df6ff84e43bsalomon@google.com else 9005a718c9d2302b08f859adac5854b2df6ff84e43bsalomon@google.com return thread_id == m_tid; 9105a718c9d2302b08f859adac5854b2df6ff84e43bsalomon@google.com } 9205a718c9d2302b08f859adac5854b2df6ff84e43bsalomon@google.com 93ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com bool 94ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com IndexMatches (uint32_t index) const 95ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com { 96c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org if (m_index == -1 || index == -1) 97ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com return true; 98c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org else 99c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org return index == m_index; 100c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org } 101c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org 102c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org bool 103c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org NameMatches (const char *name) const 104c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org { 105c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org if (m_name.empty()) 106c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org return true; 107c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org else if (name == NULL) 108ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com return false; 109c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org else 110e79f320ed6c5ec9f6164ba84be1ff586532e6517robertphillips@google.com return m_name == name; 111c4dc0ad8e252a7e30d19b47d3d0d9f2c69faf854commit-bot@chromium.org } 112ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com 113ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com bool 114ded4f4b163f5aa19c22c871178c55ecb34623846bsalomon@google.com QueueNameMatches (const char *queue_name) const 115 { 116 if (m_queue_name.empty()) 117 return true; 118 else if (queue_name == NULL) 119 return false; 120 else 121 return m_queue_name == queue_name; 122 } 123 124protected: 125private: 126 uint32_t m_index; 127 lldb::tid_t m_tid; 128 std::string m_name; 129 std::string m_queue_name; 130}; 131 132} // namespace lldb_private 133 134#endif // liblldb_ThreadSpec_h_ 135