diff options
Diffstat (limited to 'Examples/test-suite/li_attribute_template.i')
-rw-r--r-- | Examples/test-suite/li_attribute_template.i | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/Examples/test-suite/li_attribute_template.i b/Examples/test-suite/li_attribute_template.i new file mode 100644 index 000000000..3d4c108ef --- /dev/null +++ b/Examples/test-suite/li_attribute_template.i @@ -0,0 +1,110 @@ +%module li_attribute_template + +%include <exception.i> + +//#define SWIG_ATTRIBUTE_TEMPLATE +%include <attribute.i> +%include <std_string.i> + +%inline +{ + class Foo { + public: + Foo( int _value ) { value = _value; } + int value; + }; + + template< class T1, class T2> + struct pair{ + pair( T1 t1, T2 t2 ): + first(t1), second(t2) {;} + + T1 first; + T2 second; + }; + + template< class T1, class T2> + struct C + { + C(int a, int b, int c) : + _a(a), _b(b), _c(c), _d(a), _e(b), + _f(a,b), _g(b,c) + { + +/* + _f.first = _a; + _f.second = _b; + + _g.first = _b; + _g.second = _c; +*/ + + } + + int get_value() const + { + return _a; + } + + void set_value(int aa) + { + _a = aa; + } + + /* only one ref method */ + int& get_ref() + { + return _b; + } + + Foo get_class_value() const { return _d; } + void set_class_value( Foo foo) { _d = foo; } + + const Foo& get_class_ref() const { return _e; } + void set_class_ref( const Foo& foo ) { _e = foo; } + + pair<T1,T2> get_template_value() const { return _f; } + void set_template_value( const pair<T1,T2> f ) { _f = f; } + + const pair<T1,T2>& get_template_ref() const { return _g; } + void set_template_ref( const pair<T1,T2>& g ) { _g = g; } + + std::string get_string() { return str; } + void set_string(std::string other) { str = other; } + + private: + int _a; + int _b; + int _c; + Foo _d; + Foo _e; + pair<T1,T2> _f; + pair<T1,T2> _g; + + std::string str; + }; + +} + +%define %instantiate_C( T1, T2 ) +%template (pair_ ## T1 ## T2 ) pair<T1,T2>; +// Primitive types +%attribute( %arg(C<T1,T2>), int, a, get_value, set_value ); +%attributeref( %arg(C<T1,T2>), int, b, get_ref ); + +// Strings +%attributestring(%arg(C<T1,T2>), std::string, str, get_string, set_string); + +// Class types +%attributeval( %arg(C<T1,T2>), Foo, d, get_class_value, set_class_value ); +%attribute2( %arg(C<T1,T2>), Foo, e, get_class_ref, set_class_ref ); + +// Moderately templated types +%attributeval( %arg(C<T1,T2>), %arg(pair<T1,T2>), f, get_template_value, set_template_value ); +%attribute2( %arg(C<T1,T2>), %arg(pair<T1,T2>), g, get_template_ref, set_template_ref ); + +%template (C ## T1 ## T2) C<T1,T2>; +%enddef + + +%instantiate_C(int,int); |