File: cpp11_shared_ptr_crtp_upcast.i

package info (click to toggle)
swig 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 46,232 kB
  • sloc: cpp: 54,631; ansic: 29,122; java: 17,530; python: 12,505; cs: 10,369; ruby: 7,232; yacc: 6,477; makefile: 5,965; javascript: 5,520; sh: 5,415; perl: 4,187; php: 3,693; ml: 2,187; lisp: 2,056; tcl: 1,991; xml: 115
file content (92 lines) | stat: -rw-r--r-- 2,985 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
%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> > >) {
}
%}