/* A modification of factory.swg from the generic UTL library. */ %include <typemaps/swigmacros.swg> %define %_factory_dispatch(Type) if (!dcast) { Type *dobj = dynamic_cast<Type *>($1); if (dobj) { dcast = 1; SWIG_NewPointerObj(L, dobj, $descriptor(Type *), $owner); SWIG_arg++; } }%enddef %define %factory(Method,Types...) %typemap(out) Method { int dcast = 0; %formacro(%_factory_dispatch, Types) if (!dcast) { SWIG_NewPointerObj(L, $1, $descriptor, $owner); SWIG_arg++; } }%enddef