Octave: install functions only once, when creating module
- once installed, Octave functions can never really be uninstalled (clear -f doesn't prevent the function being called again), so it makes no sense to install functions more than once - this can lead to a significant speed-up of module loading times, up to a factor of 10 for a large module loaded multiple times
This commit is contained in:
parent
ef160ec072
commit
93650b2911
1 changed files with 10 additions and 8 deletions
|
|
@ -288,6 +288,15 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
|
|||
|
||||
SWIG_InstallOps(octave_swig_ref::static_type_id());
|
||||
|
||||
octave_swig_type::swig_member_const_iterator mb;
|
||||
for (mb = module_ns->swig_members_begin(); mb != module_ns->swig_members_end(); ++mb) {
|
||||
if (mb->second.first && mb->second.first->method) {
|
||||
if (!SWIG_Octave_InstallFunction(me, mb->first)) {
|
||||
return octave_value_list();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if OCTAVE_API_VERSION_NUMBER < 37
|
||||
mlock(me->name());
|
||||
#else
|
||||
|
|
@ -296,16 +305,9 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
|
|||
|
||||
}
|
||||
|
||||
octave_function *me = octave_call_stack::current();
|
||||
|
||||
octave_swig_type::swig_member_const_iterator mb;
|
||||
for (mb = module_ns->swig_members_begin(); mb != module_ns->swig_members_end(); ++mb) {
|
||||
if (mb->second.first && mb->second.first->method) {
|
||||
if (!SWIG_Octave_InstallFunction(me, mb->first)) {
|
||||
return octave_value_list();
|
||||
}
|
||||
}
|
||||
else if (mb->second.second.is_defined()) {
|
||||
if (mb->second.second.is_defined()) {
|
||||
SWIG_Octave_SetGlobalValue(mb->first, mb->second.second);
|
||||
SWIG_Octave_LinkGlobalValue(mb->first);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue