blob: a6f9af30c917d920054d060e572923c0f49873ce [file] [log] [blame]
#ifndef USER_SELECTION_H
#define USER_SELECTION_H
class user_selection {
public:
/* Default constructor, nothing is selected. */
user_selection ()
: m_inferior (nullptr),
m_thread (nullptr),
m_frame_id (null_frame_id),
m_frame_level (INVALID_FRAME_LEVEL)
{}
/* Make INF the selected inferior. If NOTIFY is true, call the observer
indicating a selection change.
Return true if the newly selected inferior is different than the previously
selected inferior. */
bool select_inferior (struct inferior *inf, bool notify);
/* Make THREAD the selected thread. If NOTIFY is true, call the observer
indicating a selection change.
Return true if the newly selected thread is different than the previously
selected thread. */
bool select_thread (struct thread_info *thread, bool notify);
/* Make FRAME the selected frame. If NOTIFY is true, call the observer
indicating a selection change.
Return true if the newly selected frame is different than the previously
selected frame. */
bool select_frame (struct frame_info *frame, bool notify);
/* Get the selected inferior. */
struct inferior *inferior () const
{ return m_inferior; }
/* Get the selected thread. */
struct thread_info *thread () const
{ return m_thread; }
/* Get the selected frame. */
struct frame_info *
frame ()
{
if (!has_valid_frame ())
try_select_current_frame ();
if (!has_valid_frame ())
return NULL;
return frame_find_by_id (m_frame_id);
}
frame_id
raw_frame_id () const
{ return m_frame_id; }
int
raw_frame_level () const
{ return m_frame_level; }
bool has_valid_frame () const
{ return m_frame_level != INVALID_FRAME_LEVEL; }
private:
struct inferior *m_inferior;
struct thread_info *m_thread;
struct frame_id m_frame_id;
int m_frame_level;
void sanity_check () const;
void try_select_current_frame ();
};
/* Get the global user selection. */
user_selection *global_user_selection ();
/* Initialize the global user selection. This must be called after the initial
inferior has been created. */
void init_global_user_selection ();
/* Apply the global user selection to core of gdb. */
void apply_global_user_selection ();
#endif /* USER_SELECTION_H */