summaryrefslogtreecommitdiff
path: root/gdb/user-selection.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/user-selection.h')
-rw-r--r--gdb/user-selection.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/gdb/user-selection.h b/gdb/user-selection.h
new file mode 100644
index 00000000000..a6f9af30c91
--- /dev/null
+++ b/gdb/user-selection.h
@@ -0,0 +1,100 @@
+#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 */