diff options
Diffstat (limited to 'Source/Modules1.1/module.cxx')
-rw-r--r-- | Source/Modules1.1/module.cxx | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Source/Modules1.1/module.cxx b/Source/Modules1.1/module.cxx new file mode 100644 index 000000000..57aa6c304 --- /dev/null +++ b/Source/Modules1.1/module.cxx @@ -0,0 +1,57 @@ +/* ----------------------------------------------------------------------------- + * module.cxx + * + * This file is responsible for the module system. + * + * Author(s) : David Beazley (beazley@cs.uchicago.edu) + * + * Copyright (C) 1999-2000. The University of Chicago + * See the file LICENSE for information on usage and redistribution. + * ----------------------------------------------------------------------------- */ + +char cvsroot_module_cxx[] = "$Header$"; + +#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; + } +}; + +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; +} |