%module(package="csmapi") plugin %{ #include "Plugin.h" typedef csm::Plugin Plugin; %} %include %include %include Model.h %apply SWIGTYPE *DYNAMIC { csm::Model * }; %include Plugin.h typedef csm::Plugin Plugin; // Returns a list of pointer to pointers (which is necessary because the // plugin is an abstract base class...) %template(PluginList) std::list; %{ namespace swig { template <> struct traits { typedef pointer_category category; static const char* type_name() { return "Plugin"; } }; } %} // A general purpose function for dynamic casting of a Model * %{ static swig_type_info * Model_dynamic(void **ptr) { csm::RasterGM *b; b = dynamic_cast((csm::Model *) *ptr); if (b) { *ptr = (void *) b; return SWIGTYPE_p_csm__RasterGM; } return 0; } %} // Register the above casting function DYNAMIC_CAST(SWIGTYPE_p_csm__Model, Model_dynamic);