1 %module template_default_class_parms
2 
3 #ifdef SWIGOCAML
4 %warnfilter(SWIGWARN_PARSE_KEYWORD) method;
5 #endif
6 
7 %inline %{
8 namespace Space {
9   struct SomeType {};
10   struct AnotherType {};
11   template<typename C, typename D = SomeType, typename E = int> class Bar {
12   public:
13     C CType;
14     D DType;
15     E EType;
Bar(C c,D d,E e)16     Bar(C c, D d, E e) {}
method(C c,D d,E e)17     C method(C c, D d, E e) { return c; }
18   };
19   template<typename T = SomeType> class Foo {
20   public:
21     T TType;
Foo(T t)22     Foo(T t) {}
method(T t)23     T method(T t) { return t; }
24   };
25   template<typename T = int> class ATemplate {};
26 }
27 %}
28 
29 // Use defaults
30 %template(DefaultBar) Space::Bar<double>;
31 %template(DefaultFoo) Space::Foo<>;
32 
33 // Don't use all defaults
34 %template(BarAnotherTypeBool) Space::Bar<Space::AnotherType, bool>;
35 %template(FooAnotherType) Space::Foo<Space::AnotherType>;
36 
37 %template() Space::ATemplate<>;
38 
39 
40 // Github issue #280 segfault
41 %inline %{
42 namespace Teuchos {
43   class Describable {};
44 }
45 namespace KokkosClassic {
46   namespace DefaultNode {
47     struct DefaultNodeType {};
48   }
49 }
50 
51 namespace Tpetra {
52   template <class LocalOrdinal = int,
53             class GlobalOrdinal = LocalOrdinal,
54             class Node = KokkosClassic::DefaultNode::DefaultNodeType>
55   class Map : public Teuchos::Describable {
56   public:
57     typedef LocalOrdinal local_ordinal_type;
58     typedef GlobalOrdinal global_ordinal_type;
59     typedef Node node_type;
test_func(LocalOrdinal,GlobalOrdinal,Node)60     void test_func(LocalOrdinal, GlobalOrdinal, Node) {}
61   };
62 }
63 %}
64 
65 #ifdef SWIGJAVA
66 // Fixes still required for other languages
67 %template(MapDefaults) Tpetra::Map<>;
68 #endif
69 
70 %inline %{
71 namespace Details {
72   template < class LO = ::Tpetra::Map<>::local_ordinal_type,
73             class GO = typename ::Tpetra::Map<LO>::global_ordinal_type,
74             class NT = typename ::Tpetra::Map<LO, GO>::node_type >
75   class Transfer : public Teuchos::Describable {
76   public:
transfer_func(LO,GO,NT)77     void transfer_func(LO, GO, NT) {}
78   };
79 }
80 %}
81 
82 // Below is not resolving correctly yet
83 //%template(TransferDefaults) Details::Transfer<>;
84