mirror of https://github.com/swig/swig
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
/* -----------------------------------------------------------------------------
|
|
* This file is part of SWIG, which is licensed as a whole under version 3
|
|
* (or any later version) of the GNU General Public License. Some additional
|
|
* terms also apply to certain portions of SWIG. The full details of the SWIG
|
|
* license and copyrights can be found in the LICENSE and COPYRIGHT files
|
|
* included with the SWIG source code as distributed by the SWIG developers
|
|
* and at http://www.swig.org/legal.html.
|
|
*
|
|
* module.cxx
|
|
*
|
|
* This file is responsible for the module system.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
char cvsroot_module_cxx[] = "$Id$";
|
|
|
|
#include "swigmod.h"
|
|
|
|
struct Module {
|
|
ModuleFactory fac;
|
|
char *name;
|
|
Module *next;
|
|
Module(const char *n, ModuleFactory f) {
|
|
fac = f;
|
|
name = new char[strlen(n) + 1];
|
|
strcpy(name, n);
|
|
next = 0;
|
|
} ~Module() {
|
|
delete[]name;
|
|
}
|
|
};
|
|
|
|
static Module *modules = 0;
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
* void Swig_register_module()
|
|
*
|
|
* Register a module.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
void Swig_register_module(const char *n, ModuleFactory f) {
|
|
Module *m = new Module(n, f);
|
|
m->next = modules;
|
|
modules = m;
|
|
}
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
* Language *Swig_find_module()
|
|
*
|
|
* Given a command line option, locates the factory function.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
ModuleFactory Swig_find_module(const char *name) {
|
|
Module *m = modules;
|
|
while (m) {
|
|
if (strcmp(m->name, name) == 0) {
|
|
return m->fac;
|
|
}
|
|
m = m->next;
|
|
}
|
|
return 0;
|
|
}
|