diff libinterp/corefcn/dynamic-ld.h @ 22999:f4781639f847

convert octave_shlib_list from singleton to ordinary object * dynamic-ld.h, dynamic-ld.cc (octave_dynamic_loader::loaded_shlibs_list): Rename from octave_shlib_list. Convert from singleton to ordinary object. Change all uses. (octave_dynamic_loader::loaded_shlibs): New data member. The octave_dynamic_loader object now owns the list of loaded shared libraries.
author John W. Eaton <jwe@octave.org>
date Wed, 04 Jan 2017 23:09:46 -0500
parents f75d289645ec
children f981282a3bd0
line wrap: on
line diff
--- a/libinterp/corefcn/dynamic-ld.h	Thu Jan 05 11:06:27 2017 +0100
+++ b/libinterp/corefcn/dynamic-ld.h	Wed Jan 04 23:09:46 2017 -0500
@@ -25,6 +25,7 @@
 
 #include "octave-config.h"
 
+#include <list>
 #include <string>
 
 #include "oct-shlib.h"
@@ -34,9 +35,44 @@
 class
 octave_dynamic_loader
 {
+private:
+
+  class
+  loaded_shlibs_list
+  {
+  public:
+
+    typedef std::list<octave::dynamic_library>::iterator iterator;
+    typedef std::list<octave::dynamic_library>::const_iterator const_iterator;
+
+    loaded_shlibs_list (void) : lib_list () { }
+
+    ~loaded_shlibs_list (void) = default;
+
+    void append (const octave::dynamic_library& shl);
+
+    void remove (octave::dynamic_library& shl,
+                 octave::dynamic_library::close_hook cl_hook = 0);
+
+    octave::dynamic_library find_file (const std::string& file_name) const;
+
+    void display (void) const;
+
+  private:
+
+    // No copying!
+
+    loaded_shlibs_list (const loaded_shlibs_list&) = delete;
+
+    loaded_shlibs_list& operator = (const loaded_shlibs_list&) = delete;
+
+    // List of libraries we have loaded.
+    std::list<octave::dynamic_library> lib_list;
+  };
+
 protected:
 
-  octave_dynamic_loader (void) { }
+  octave_dynamic_loader (void) : loaded_shlibs () { }
 
 public:
 
@@ -72,6 +108,8 @@
 
   static bool instance_ok (void);
 
+  void do_clear (octave::dynamic_library& oct_file);
+
   octave_function *
   do_load_oct (const std::string& fcn_name,
                const std::string& file_name = "",
@@ -90,6 +128,8 @@
 
 protected:
 
+  loaded_shlibs_list loaded_shlibs;
+
   static std::string name_mangler (const std::string& name);
 
   static std::string name_uscore_mangler (const std::string& name);