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