124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DNBThreadResumeActions.h --------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  Created by Greg Clayton on 03/13/2010
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __DNBThreadResumeActions_h__
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __DNBThreadResumeActions_h__
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DNBDefs.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DNBThreadResumeActions
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBThreadResumeActions ();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBThreadResumeActions (nub_state_t default_action, int signal);
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBThreadResumeActions (const DNBThreadResumeAction *actions, size_t num_actions);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsEmpty() const
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_actions.empty();
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Append (const DNBThreadResumeAction &action);
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AppendAction (nub_thread_t tid,
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  nub_state_t state,
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  int signal = 0,
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  nub_addr_t addr = INVALID_NUB_ADDRESS);
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AppendResumeAll ()
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        AppendAction (INVALID_NUB_THREAD, eStateRunning);
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AppendSuspendAll ()
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        AppendAction (INVALID_NUB_THREAD, eStateStopped);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AppendStepAll ()
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        AppendAction (INVALID_NUB_THREAD, eStateStepping);
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DNBThreadResumeAction *
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetActionForThread (nub_thread_t tid, bool default_ok) const;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    NumActionsWithState (nub_state_t state) const;
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetDefaultThreadActionIfNeeded (nub_state_t action, int signal);
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetSignalHandledForThread (nub_thread_t tid) const;
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DNBThreadResumeAction *
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFirst() const
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_actions.data();
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSize () const
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_actions.size();
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
88c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton
89c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton    void
90c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton    Clear()
91c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton    {
92c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton        m_actions.clear();
93c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton        m_signal_handled.clear();
94c71899ef308e6134d1b0ca5f30cbc64414855e1aGreg Clayton    }
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::vector<DNBThreadResumeAction> m_actions;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    mutable std::vector<bool> m_signal_handled;
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif    // #ifndef __DNBThreadResumeActions_h__
103