blob: f00dc1ff46e3d859726c45b68a733bafd6691251 [file] [log] [blame]
%module cpp11_shared_ptr_crtp_upcast
// Cutdown testcase for assert reported in https://github.com/swig/swig/issues/2768
// Note that this test has CRTP and %template instantiations for DiscretisedDensity template parameters not fully resolved
%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
SWIGWARN_D_MULTIPLE_INHERITANCE,
SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
SWIGWARN_PHP_MULTIPLE_INHERITANCE) stir::DiscretisedDensity<3,float>;
%include <std_shared_ptr.i>
%{
#include <memory>
namespace stir {}
using namespace stir;
%}
%inline %{
namespace stir {
// Note: CRTP
template <typename Derived, typename Base, typename Parent = Base>
class RegisteredParsingObject : public Parent {
};
}
%}
%shared_ptr(stir::Array<3,float>)
%inline %{
namespace stir {
template <int num_dimensions, typename elemT>
class Array {
};
}
%}
%template(FloatArray3D) stir::Array<3,float>;
%shared_ptr(stir::ExamData);
%inline %{
namespace stir {
class ExamData {
};
}
%}
%shared_ptr(stir::DiscretisedDensity<3,float>)
%inline %{
namespace stir {
template<int num_dimensions, typename elemT>
class DiscretisedDensity : public ExamData, public Array<num_dimensions,elemT> {
};
}
%}
%shared_ptr(stir::DataProcessor<stir::DiscretisedDensity<3,float> >)
%shared_ptr(stir::RegisteredParsingObject<
stir::ChainedDataProcessor<stir::DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> > >)
%shared_ptr(stir::ChainedDataProcessor<stir::DiscretisedDensity<3,float> >)
%inline %{
namespace stir {
template <typename DataT>
class DataProcessor {
};
template <typename DataT>
class ChainedDataProcessor : public RegisteredParsingObject< ChainedDataProcessor<DataT>, DataProcessor<DataT>, DataProcessor<DataT> > {
};
}
%}
// SWIG will qualify Discretised in the %template() declaration even though Discretised
// is not in scope with the 'using namespace stir' below commented out.
//using namespace stir;
%template(Float3DDiscretisedDensity) stir::DiscretisedDensity<3,float>;
%template(DataProcessor3DFloat) stir::DataProcessor<stir::DiscretisedDensity<3,float> >;
%template(RPChainedDataProcessor3DFloat) stir::RegisteredParsingObject<
stir::ChainedDataProcessor<stir::DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> > >;
%template(ChainedDataProcessor3DFloat) stir::ChainedDataProcessor<stir::DiscretisedDensity<3,float> >;
%inline %{
void useobject(stir::RegisteredParsingObject<
stir::ChainedDataProcessor<stir::DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> >,
stir::DataProcessor<DiscretisedDensity<3,float> > >) {
}
%}