aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/csharp_argument_defaults_feature.i
blob: 36402964622d362bd1ee9cb402ee5a8b9efddbd1 (plain)
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
93
94
95
96
97
98
99
%module csharp_argument_defaults_feature
%include "std_string.i"
%include <swiginterface.i>

%feature("cs:defaultargs") Foo::Foo;
%feature("cs:defaultargs", z=4) Foo::bar;
%feature("cs:defaultargs", x="\"fives\"") Foo::zoo;
%feature("cs:defaultargs", value="System.Math.PI") Foo::pi;
%feature("cs:defaultargs", s=R"--("fives")--") Foo::lengthOfString;
%feature("cs:defaultargs", z=4) ::gbar;
%feature("cs:defaultargs", z=4) Foo::sbar;
%feature("cs:defaultargs", z=4) AnInterface::foo;
%interface(AnInterface)

//intentionally don't touch bat, leave it to normal handling

%inline %{
#include <string>

enum EnumerationType {
    one=1,
    two,
    three
};

int gbar(int x, int y=2, int z=3)
{
    return x+y+z;
}
int gbat(int x=1, int y=2, int z=3)
{
    return x+y+z;
}

class Foo {
public:
    virtual ~Foo() {}
    Foo(int a, int b=1, int c=2)
    {
    }
    int bar(int x, int y=2, int z=3)
    {
        return x+y+z;
    }
    int bat(int x=1, int y=2, int z=3)
    {
        return x+y+z;
    }
    int zoo(std::string x="four")
    {
        return (int)x.size();
    }
    double pi(double value=3.14)
    {
        return value;
    }
    int lengthOfString(const std::string& s="four")
    {
        return (int)s.size();
    }
    int valueofenum(EnumerationType t=two)
    {
        return (int)t;
    }
    int valueofchar(char c='c')
    {
        return (int)c;
    }

    static int sbar(int x, int y=2, int z=3)
    {
        return x+y+z;
    }
    static int sbat(int x=1, int y=2, int z=3)
    {
        return x+y+z;
    }
};

class AnInterface
{
public:
    AnInterface() {}
    virtual int foo(int x=1, int y=2, int z=3) = 0;
    virtual ~AnInterface() {}
};

class AnImplementation: public AnInterface
{
public:
    int foo(int x=1, int y=2, int z=3)
    {
        return x*y+z;
    }
};
%}