1254721Semaste//===-- ThreadPlanRunToAddress.h --------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_ThreadPlanRunToAddress_h_
11254721Semaste#define liblldb_ThreadPlanRunToAddress_h_
12254721Semaste
13254721Semaste// C Includes
14254721Semaste// C++ Includes
15254721Semaste#include <vector>
16254721Semaste
17254721Semaste// Other libraries and framework includes
18254721Semaste// Project includes
19254721Semaste#include "lldb/lldb-private.h"
20254721Semaste#include "lldb/Target/ThreadPlan.h"
21254721Semaste
22254721Semastenamespace lldb_private {
23254721Semaste
24254721Semasteclass ThreadPlanRunToAddress : public ThreadPlan
25254721Semaste{
26254721Semastepublic:
27254721Semaste    ThreadPlanRunToAddress (Thread &thread,
28254721Semaste                            Address &address,
29254721Semaste                            bool stop_others);
30254721Semaste
31254721Semaste    ThreadPlanRunToAddress (Thread &thread,
32254721Semaste                            lldb::addr_t address,
33254721Semaste                            bool stop_others);
34254721Semaste
35254721Semaste    ThreadPlanRunToAddress (Thread &thread,
36254721Semaste                            const std::vector<lldb::addr_t> &addresses,
37254721Semaste                            bool stop_others);
38254721Semaste
39254721Semaste
40254721Semaste    virtual
41254721Semaste    ~ThreadPlanRunToAddress ();
42254721Semaste
43254721Semaste    virtual void
44254721Semaste    GetDescription (Stream *s, lldb::DescriptionLevel level);
45254721Semaste
46254721Semaste    virtual bool
47254721Semaste    ValidatePlan (Stream *error);
48254721Semaste
49254721Semaste    virtual bool
50254721Semaste    ShouldStop (Event *event_ptr);
51254721Semaste
52254721Semaste    virtual bool
53254721Semaste    StopOthers ();
54254721Semaste
55254721Semaste    virtual void
56254721Semaste    SetStopOthers (bool new_value);
57254721Semaste
58254721Semaste    virtual lldb::StateType
59254721Semaste    GetPlanRunState ();
60254721Semaste
61254721Semaste    virtual bool
62254721Semaste    WillStop ();
63254721Semaste
64254721Semaste    virtual bool
65254721Semaste    MischiefManaged ();
66254721Semaste
67254721Semasteprotected:
68254721Semaste    virtual bool
69254721Semaste    DoPlanExplainsStop (Event *event_ptr);
70254721Semaste
71254721Semaste    void SetInitialBreakpoints();
72254721Semaste    bool AtOurAddress();
73254721Semasteprivate:
74254721Semaste    bool m_stop_others;
75254721Semaste    std::vector<lldb::addr_t> m_addresses;   // This is the address we are going to run to.
76254721Semaste                          // TODO: Would it be useful to have multiple addresses?
77254721Semaste    std::vector<lldb::break_id_t> m_break_ids; // This is the breakpoint we are using to stop us at m_address.
78254721Semaste
79254721Semaste    DISALLOW_COPY_AND_ASSIGN (ThreadPlanRunToAddress);
80254721Semaste
81254721Semaste};
82254721Semaste
83254721Semaste} // namespace lldb_private
84254721Semaste
85254721Semaste#endif  // liblldb_ThreadPlanRunToAddress_h_
86