# HG changeset patch # User John W. Eaton # Date 1581193975 18000 # Node ID b3701ea5a48de23e3a338657954734c1e3898227 # Parent 5f57a71d67db0bae3f8461d1b4fd6837a9d6aa6a use std::function object for passing name mangler to search function * oct-shlib.h, oct-shlib.cc (dynamic_library::name_mangler): Use std::fucntion object instead of bare function pointer. (dynamic_library::search): Pass mangler by const reference. (dynamic_library::dynlib_reference::search): Pass mangler by const reference. Change all derived classes. diff -r 5f57a71d67db -r b3701ea5a48d liboctave/util/oct-shlib.cc --- a/liboctave/util/oct-shlib.cc Mon Feb 10 18:48:24 2020 -0800 +++ b/liboctave/util/oct-shlib.cc Sat Feb 08 15:32:55 2020 -0500 @@ -172,7 +172,8 @@ ~octave_dlopen_shlib (void); void * search (const std::string& name, - dynamic_library::name_mangler mangler = nullptr); + const dynamic_library::name_mangler& mangler + = dynamic_library::name_mangler ()); // FIXME: this is possibly redundant because failure to open a library will // normally throw an exception, avoiding the construction of an invalid @@ -236,7 +237,7 @@ void * octave_dlopen_shlib::search (const std::string& name, - dynamic_library::name_mangler mangler) + const dynamic_library::name_mangler& mangler) { void *function = nullptr; @@ -275,7 +276,8 @@ ~octave_w32_shlib (void); void * search (const std::string& name, - dynamic_library::name_mangler mangler = nullptr); + const dynamic_library::name_mangler& mangler + = dynamic_library::name_mangler ()); void * global_search (const std::string& sym_name); @@ -390,7 +392,7 @@ void * octave_w32_shlib::search (const std::string& name, - dynamic_library::name_mangler mangler) + const dynamic_library::name_mangler& mangler) { void *function = nullptr; diff -r 5f57a71d67db -r b3701ea5a48d liboctave/util/oct-shlib.h --- a/liboctave/util/oct-shlib.h Mon Feb 10 18:48:24 2020 -0800 +++ b/liboctave/util/oct-shlib.h Sat Feb 08 15:32:55 2020 -0500 @@ -28,9 +28,10 @@ #include "octave-config.h" +#include #include +#include #include -#include #include "oct-time.h" #include "oct-refcount.h" @@ -43,7 +44,7 @@ { public: // FIXME: make this class private? - typedef std::string (*name_mangler) (const std::string&); + typedef std::function name_mangler; class dynlib_rep { @@ -68,7 +69,8 @@ virtual bool is_open (void) const { return false; } - virtual void * search (const std::string&, name_mangler = nullptr) + virtual void * search (const std::string&, + const name_mangler& = name_mangler ()) { return nullptr; } bool is_out_of_date (void) const; @@ -170,7 +172,8 @@ return removed_fcns; } - void * search (const std::string& nm, name_mangler mangler = nullptr) const + void * search (const std::string& nm, + const name_mangler& mangler = name_mangler ()) const { void *f = m_rep->search (nm, mangler); if (f)