diff libinterp/corefcn/graphics.in.h @ 27321:eddce82a57cc

don't use singleton pattern for gh_manager object * interpreter.h, interpreter.cc (interpreter::m_gh_manager): New data member. (interpreter::interpreter): Initialize it. (interpreter::get_gh_manager): New function. * interpreter-private.h, interpreter-private.cc (__get_gh_manager__): New function. * graphics.in.h, graphics.cc (gh_manager::instance): Delete. (gh_manager::m_interpreter): New data member. (gh_manager::gh_manager): Accept reference to interpreter as argument. Make public. (gh_manager::create_instance): Delete. (gh_manager& gh_manager::instance): New member function. Replace direct uses of previous global instance variable with this function to access gh_manager from interpreter object. (gh_manager::instance_ok): Delete. Change all uses to assume that the gh_manager instance is always present. (gh_manager::cleanup_instance): Delete.
author John W. Eaton <jwe@octave.org>
date Mon, 05 Aug 2019 10:42:18 -0500
parents 1dfd6ae74fbf
children 728e4d99febb
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.in.h	Mon Aug 05 10:29:21 2019 -0500
+++ b/libinterp/corefcn/graphics.in.h	Mon Aug 05 10:42:18 2019 -0500
@@ -6196,58 +6196,40 @@
 
 class OCTINTERP_API gh_manager
 {
-protected:
-
-  gh_manager (void);
-
 public:
 
-  static void create_instance (void);
-
-  static bool instance_ok (void)
-  {
-    bool retval = true;
-
-    if (! instance)
-      create_instance ();
-
-    if (! instance)
-      error ("unable to create gh_manager!");
-
-    return retval;
-  }
-
-  static void cleanup_instance (void) { delete instance; instance = nullptr; }
+  gh_manager (octave::interpreter& interp);
+
+  // FIXME: eventually eliminate these static functions and access
+  // gh_manager object through the interpreter.
+
+  static gh_manager& instance (void);
 
   static graphics_handle get_handle (bool integer_figure_handle)
   {
-    return instance_ok ()
-           ? instance->do_get_handle (integer_figure_handle)
-           : graphics_handle ();
+    return instance().do_get_handle (integer_figure_handle);
   }
 
   static void free (const graphics_handle& h, bool from_root = false)
   {
-    if (instance_ok ())
-      instance->do_free (h, from_root);
+    instance().do_free (h, from_root);
   }
 
   static void renumber_figure (const graphics_handle& old_gh,
                                const graphics_handle& new_gh)
   {
-    if (instance_ok ())
-      instance->do_renumber_figure (old_gh, new_gh);
+    instance().do_renumber_figure (old_gh, new_gh);
   }
 
   static graphics_handle lookup (double val)
   {
-    return instance_ok () ? instance->do_lookup (val) : graphics_handle ();
+    return instance().do_lookup (val);
   }
 
   static graphics_handle lookup (const octave_value& val)
   {
-    return val.is_real_scalar ()
-           ? lookup (val.double_value ()) : graphics_handle ();
+    return (val.is_real_scalar ()
+            ? lookup (val.double_value ()) : graphics_handle ());
   }
 
   static graphics_object get_object (double val)
@@ -6257,7 +6239,7 @@
 
   static graphics_object get_object (const graphics_handle& h)
   {
-    return instance_ok () ? instance->do_get_object (h) : graphics_object ();
+    return instance().do_get_object (h);
   }
 
   static graphics_handle
@@ -6267,76 +6249,62 @@
                         bool do_createfcn = true,
                         bool do_notify_toolkit = true)
   {
-    return instance_ok ()
-           ? instance->do_make_graphics_handle (go_name, parent,
-               integer_figure_handle,
-               do_createfcn, do_notify_toolkit)
-           : graphics_handle ();
+    return instance().do_make_graphics_handle (go_name, parent,
+                                               integer_figure_handle,
+                                               do_createfcn,
+                                               do_notify_toolkit);
   }
 
   static graphics_handle make_figure_handle (double val,
                                              bool do_notify_toolkit = true)
   {
-    return instance_ok ()
-           ? instance->do_make_figure_handle (val, do_notify_toolkit)
-           : graphics_handle ();
+    return instance().do_make_figure_handle (val, do_notify_toolkit);
   }
 
   static void push_figure (const graphics_handle& h)
   {
-    if (instance_ok ())
-      instance->do_push_figure (h);
+    instance().do_push_figure (h);
   }
 
   static void pop_figure (const graphics_handle& h)
   {
-    if (instance_ok ())
-      instance->do_pop_figure (h);
+    instance().do_pop_figure (h);
   }
 
   static graphics_handle current_figure (void)
   {
-    return instance_ok ()
-           ? instance->do_current_figure () : graphics_handle ();
+    return instance().do_current_figure ();
   }
 
   static Matrix handle_list (bool show_hidden = false)
   {
-    return instance_ok ()
-           ? instance->do_handle_list (show_hidden) : Matrix ();
+    return instance().do_handle_list (show_hidden);
   }
 
   static void lock (void)
   {
-    if (instance_ok ())
-      instance->do_lock ();
+    instance().do_lock ();
   }
 
   static bool try_lock (void)
   {
-    if (instance_ok ())
-      return instance->do_try_lock ();
-    else
-      return false;
+    return instance().do_try_lock ();
   }
 
   static void unlock (void)
   {
-    if (instance_ok ())
-      instance->do_unlock ();
+    instance().do_unlock ();
   }
 
   static Matrix figure_handle_list (bool show_hidden = false)
   {
-    return instance_ok ()
-           ? instance->do_figure_handle_list (show_hidden) : Matrix ();
+    return instance().do_figure_handle_list (show_hidden);
   }
 
   static void execute_listener (const graphics_handle& h,
                                 const octave_value& l)
   {
-    if (instance_ok ())
-      instance->do_execute_listener (h, l);
+    instance().do_execute_listener (h, l);
   }
 
   static void execute_callback (const graphics_handle& h,
@@ -6362,46 +6330,41 @@
                                 const octave_value& cb,
                                 const octave_value& data = Matrix ())
   {
-    if (instance_ok ())
-      instance->do_execute_callback (h, cb, data);
+    instance().do_execute_callback (h, cb, data);
   }
 
   static void post_callback (const graphics_handle& h,
                              const std::string& name,
                              const octave_value& data = Matrix ())
   {
-    if (instance_ok ())
-      instance->do_post_callback (h, name, data);
+    instance().do_post_callback (h, name, data);
   }
 
   static void post_function (graphics_event::event_fcn fcn, void *data = nullptr)
   {
-    if (instance_ok ())
-      instance->do_post_function (fcn, data);
+    instance().do_post_function (fcn, data);
   }
 
   static void post_set (const graphics_handle& h, const std::string& name,
                         const octave_value& value, bool notify_toolkit = true,
                         bool redraw_figure = false)
   {
-    if (instance_ok ())
-      instance->do_post_set (h, name, value, notify_toolkit, redraw_figure);
+    instance().do_post_set (h, name, value, notify_toolkit, redraw_figure);
   }
 
   static int process_events (void)
   {
-    return (instance_ok () ?  instance->do_process_events () : 0);
+    return instance().do_process_events ();
   }
 
   static int flush_events (void)
   {
-    return (instance_ok () ?  instance->do_process_events (true) : 0);
+    return instance().do_process_events (true);
   }
 
   static void enable_event_processing (bool enable = true)
   {
-    if (instance_ok ())
-      instance->do_enable_event_processing (enable);
+    instance().do_enable_event_processing (enable);
   }
 
   static bool is_handle_visible (const graphics_handle& h)
@@ -6418,8 +6381,7 @@
 
   static void close_all_figures (void)
   {
-    if (instance_ok ())
-      instance->do_close_all_figures ();
+    instance().do_close_all_figures ();
   }
 
 public:
@@ -6427,10 +6389,7 @@
   {
   public:
     auto_lock (bool wait = true)
-      : octave::autolock (instance_ok ()
-                          ? instance->graphics_lock
-                          : octave::mutex (),
-                          wait)
+      : octave::autolock (instance().graphics_lock, wait)
     { }
 
     // No copying!
@@ -6442,8 +6401,6 @@
 
 private:
 
-  static gh_manager *instance;
-
   typedef std::map<graphics_handle, graphics_object>::iterator iterator;
   typedef std::map<graphics_handle, graphics_object>::const_iterator
     const_iterator;
@@ -6454,6 +6411,8 @@
   typedef std::list<graphics_handle>::iterator figure_list_iterator;
   typedef std::list<graphics_handle>::const_iterator const_figure_list_iterator;
 
+  octave::interpreter& m_interpreter;
+
   // A map of handles to graphics objects.
   std::map<graphics_handle, graphics_object> handle_map;
 
@@ -6488,8 +6447,8 @@
 
   graphics_handle do_lookup (double val)
   {
-    iterator p = (octave::math::isnan (val) ? handle_map.end ()
-                                            : handle_map.find (val));
+    iterator p = (octave::math::isnan (val)
+                  ? handle_map.end () : handle_map.find (val));
 
     return (p != handle_map.end ()) ? p->first : graphics_handle ();
   }
@@ -6586,8 +6545,7 @@
 
   static void restore_gcbo (void)
   {
-    if (instance_ok ())
-      instance->do_restore_gcbo ();
+    instance().do_restore_gcbo ();
   }
 
   void do_restore_gcbo (void);