1//===-- DNBThreadResumeActions.h --------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  Created by Greg Clayton on 03/13/2010
11//
12//===----------------------------------------------------------------------===//
13
14
15#ifndef __DNBThreadResumeActions_h__
16#define __DNBThreadResumeActions_h__
17
18#include <vector>
19
20#include "DNBDefs.h"
21
22
23class DNBThreadResumeActions
24{
25public:
26    DNBThreadResumeActions ();
27
28    DNBThreadResumeActions (nub_state_t default_action, int signal);
29
30    DNBThreadResumeActions (const DNBThreadResumeAction *actions, size_t num_actions);
31
32    bool
33    IsEmpty() const
34    {
35        return m_actions.empty();
36    }
37
38    void
39    Append (const DNBThreadResumeAction &action);
40
41    void
42    AppendAction (nub_thread_t tid,
43                  nub_state_t state,
44                  int signal = 0,
45                  nub_addr_t addr = INVALID_NUB_ADDRESS);
46
47    void
48    AppendResumeAll ()
49    {
50        AppendAction (INVALID_NUB_THREAD, eStateRunning);
51    }
52
53    void
54    AppendSuspendAll ()
55    {
56        AppendAction (INVALID_NUB_THREAD, eStateStopped);
57    }
58
59    void
60    AppendStepAll ()
61    {
62        AppendAction (INVALID_NUB_THREAD, eStateStepping);
63    }
64
65    const DNBThreadResumeAction *
66    GetActionForThread (nub_thread_t tid, bool default_ok) const;
67
68    size_t
69    NumActionsWithState (nub_state_t state) const;
70
71    bool
72    SetDefaultThreadActionIfNeeded (nub_state_t action, int signal);
73
74    void
75    SetSignalHandledForThread (nub_thread_t tid) const;
76
77    const DNBThreadResumeAction *
78    GetFirst() const
79    {
80        return m_actions.data();
81    }
82
83    size_t
84    GetSize () const
85    {
86        return m_actions.size();
87    }
88
89    void
90    Clear()
91    {
92        m_actions.clear();
93        m_signal_handled.clear();
94    }
95
96protected:
97    std::vector<DNBThreadResumeAction> m_actions;
98    mutable std::vector<bool> m_signal_handled;
99};
100
101
102#endif    // #ifndef __DNBThreadResumeActions_h__
103