Convert observers to C++
[deliverable/binutils-gdb.git] / gdb / tui / tui-hooks.c
index 84e416e75600759b46d4b4159f4f6a86ef9bd91c..efa02e2f08a0a2ef7971ab328271fbb1fb9692c7 100644 (file)
@@ -32,7 +32,7 @@
 #include "breakpoint.h"
 #include "ui-out.h"
 #include "top.h"
-#include "observer.h"
+#include "observable.h"
 #include <unistd.h>
 #include <fcntl.h>
 
@@ -203,14 +203,42 @@ tui_normal_stop (struct bpstats *bs, int print_frame)
   tui_refresh_frame_and_register_information (/*registers_too_p=*/1);
 }
 
-/* Observers created when installing TUI hooks.  */
-static struct observer *tui_bp_created_observer;
-static struct observer *tui_bp_deleted_observer;
-static struct observer *tui_bp_modified_observer;
-static struct observer *tui_inferior_exit_observer;
-static struct observer *tui_before_prompt_observer;
-static struct observer *tui_normal_stop_observer;
-static struct observer *tui_register_changed_observer;
+/* Token associated with observers registered while TUI hooks are
+   installed.  */
+static const gdb::observers::token tui_observers_token;
+
+/* Attach or detach a single observer, according to ATTACH.  */
+
+template<typename T>
+static void
+attach_or_detach (T &observable, typename T::func_type func, bool attach)
+{
+  if (attach)
+    observable.attach (func, tui_observers_token);
+  else
+    observable.detach (tui_observers_token);
+}
+
+/* Attach or detach TUI observers, according to ATTACH.  */
+
+static void
+tui_attach_detach_observers (bool attach)
+{
+  attach_or_detach (gdb::observers::breakpoint_created,
+                   tui_event_create_breakpoint, attach);
+  attach_or_detach (gdb::observers::breakpoint_deleted,
+                   tui_event_delete_breakpoint, attach);
+  attach_or_detach (gdb::observers::breakpoint_modified,
+                   tui_event_modify_breakpoint, attach);
+  attach_or_detach (gdb::observers::inferior_exit,
+                   tui_inferior_exit, attach);
+  attach_or_detach (gdb::observers::before_prompt,
+                   tui_before_prompt, attach);
+  attach_or_detach (gdb::observers::normal_stop,
+                   tui_normal_stop, attach);
+  attach_or_detach (gdb::observers::register_changed,
+                   tui_register_changed, attach);
+}
 
 /* Install the TUI specific hooks.  */
 void
@@ -224,20 +252,7 @@ tui_install_hooks (void)
     = tui_dummy_print_frame_info_listing_hook;
 
   /* Install the event hooks.  */
-  tui_bp_created_observer
-    = observer_attach_breakpoint_created (tui_event_create_breakpoint);
-  tui_bp_deleted_observer
-    = observer_attach_breakpoint_deleted (tui_event_delete_breakpoint);
-  tui_bp_modified_observer
-    = observer_attach_breakpoint_modified (tui_event_modify_breakpoint);
-  tui_inferior_exit_observer
-    = observer_attach_inferior_exit (tui_inferior_exit);
-  tui_before_prompt_observer
-    = observer_attach_before_prompt (tui_before_prompt);
-  tui_normal_stop_observer
-    = observer_attach_normal_stop (tui_normal_stop);
-  tui_register_changed_observer
-    = observer_attach_register_changed (tui_register_changed);
+  tui_attach_detach_observers (true);
 }
 
 /* Remove the TUI specific hooks.  */
@@ -246,26 +261,14 @@ tui_remove_hooks (void)
 {
   deprecated_print_frame_info_listing_hook = 0;
   deprecated_query_hook = 0;
+
   /* Remove our observers.  */
-  observer_detach_breakpoint_created (tui_bp_created_observer);
-  tui_bp_created_observer = NULL;
-  observer_detach_breakpoint_deleted (tui_bp_deleted_observer);
-  tui_bp_deleted_observer = NULL;
-  observer_detach_breakpoint_modified (tui_bp_modified_observer);
-  tui_bp_modified_observer = NULL;
-  observer_detach_inferior_exit (tui_inferior_exit_observer);
-  tui_inferior_exit_observer = NULL;
-  observer_detach_before_prompt (tui_before_prompt_observer);
-  tui_before_prompt_observer = NULL;
-  observer_detach_normal_stop (tui_normal_stop_observer);
-  tui_normal_stop_observer = NULL;
-  observer_detach_register_changed (tui_register_changed_observer);
-  tui_register_changed_observer = NULL;
+  tui_attach_detach_observers (false);
 }
 
 void
 _initialize_tui_hooks (void)
 {
   /* Install the permanent hooks.  */
-  observer_attach_new_objfile (tui_new_objfile_hook);
+  gdb::observers::new_objfile.attach (tui_new_objfile_hook);
 }
This page took 0.024569 seconds and 4 git commands to generate.