diff src/defun-int.h @ 7336:745a8299c2b5

[project @ 2007-12-28 20:56:55 by jwe]
author jwe
date Fri, 28 Dec 2007 20:56:58 +0000
parents 2c5b14c60c6c
children a1ab9dbc9622
line wrap: on
line diff
--- a/src/defun-int.h	Fri Feb 01 23:56:51 2008 -0500
+++ b/src/defun-int.h	Fri Dec 28 20:56:58 2007 +0000
@@ -40,7 +40,7 @@
 extern OCTINTERP_API void check_version (const std::string& version, const std::string& fcn);
 
 extern OCTINTERP_API void
-install_builtin_mapper (octave_mapper *mf);
+install_builtin_mapper (octave_mapper *mf, const std::string& name);
 
 extern OCTINTERP_API void
 install_builtin_function (octave_builtin::fcn f, const std::string& name,
@@ -74,6 +74,8 @@
 
 typedef bool (*octave_dld_fcn_installer) (const octave_shlib&, bool relative);
 
+typedef octave_function * (*octave_dld_fcn_getter) (const octave_shlib&, bool relative);
+
 #define DEFINE_FUN_INSTALLER_FUN(name, doc) \
   DEFINE_FUN_INSTALLER_FUN2(name, doc, CXX_ABI)
 
@@ -81,15 +83,15 @@
   DEFINE_FUN_INSTALLER_FUN3(name, doc, cxx_abi)
 
 #define DEFINE_FUN_INSTALLER_FUN3(name, doc, cxx_abi) \
-  DEFINE_FUNX_INSTALLER_FUN3(#name, F ## name, FS ## name, doc, cxx_abi)
+  DEFINE_FUNX_INSTALLER_FUN3(#name, F ## name, FS ## name, G ## name, doc, cxx_abi)
 
-#define DEFINE_FUNX_INSTALLER_FUN(name, fname, fsname, doc) \
-  DEFINE_FUNX_INSTALLER_FUN2(name, fname, fsname, doc, CXX_ABI)
+#define DEFINE_FUNX_INSTALLER_FUN(name, fname, fsname, gname, doc) \
+  DEFINE_FUNX_INSTALLER_FUN2(name, fname, fsname, gname, doc, CXX_ABI)
 
-#define DEFINE_FUNX_INSTALLER_FUN2(name, fname, fsname, doc, cxx_abi) \
-  DEFINE_FUNX_INSTALLER_FUN3(name, fname, fsname, doc, cxx_abi)
+#define DEFINE_FUNX_INSTALLER_FUN2(name, fname, fsname, gname, doc, cxx_abi) \
+  DEFINE_FUNX_INSTALLER_FUN3(name, fname, fsname, gname, doc, cxx_abi)
 
-#define DEFINE_FUNX_INSTALLER_FUN3(name, fname, fsname, doc, cxx_abi) \
+#define DEFINE_FUNX_INSTALLER_FUN3(name, fname, fsname, gname, doc, cxx_abi) \
   extern "C" \
   OCTAVE_EXPORT \
   bool \
@@ -105,6 +107,28 @@
       install_dld_function (fname, name, shl, doc, false, relative); \
  \
     return retval; \
+  } \
+ \
+  extern "C" \
+  OCTAVE_EXPORT \
+  octave_function * \
+  gname ## _ ## cxx_abi (const octave_shlib& shl, bool relative) \
+  { \
+    octave_function *retval = 0; \
+ \
+    check_version (OCTAVE_API_VERSION, name); \
+ \
+    if (! error_state) \
+      { \
+	octave_dld_function *fcn = new octave_dld_function (fname, shl, name, doc); \
+ \
+        if (relative) \
+          fcn->mark_relative (); \
+ \
+        retval = fcn; \
+      } \
+ \
+    return retval; \
   }
 
 // MAKE_BUILTINS is defined to extract function names and related
@@ -193,8 +217,9 @@
 			      ch_map_flag, can_ret_cmplx_for_real, doc) \
   install_builtin_mapper \
     (new octave_mapper \
-     (ch_map, d_b_map, c_b_map, d_d_map, d_c_map, c_c_map, \
-      lo, hi, ch_map_flag, can_ret_cmplx_for_real, #name, doc))
+       (ch_map, d_b_map, c_b_map, d_d_map, d_c_map, c_c_map, \
+        lo, hi, ch_map_flag, can_ret_cmplx_for_real, #name, doc), \
+     #name)
 
 #endif /* ! MAKE_BUILTINS */