Added support for C++0x rvalue and move semantics.

Added testcase.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@11450 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Matevz Jekovec 2009-07-25 18:51:37 +00:00
commit a8209bfd68
4 changed files with 58 additions and 3 deletions

View file

@ -407,7 +407,8 @@ CPP0X_TEST_CASES = \
cpp0x_template_explicit \
cpp0x_uniform_initialization \
cpp0x_function_objects \
cpp0x_strongly_typed_enumerations
cpp0x_strongly_typed_enumerations \
cpp0x_rvalue_reference
# cpp0x_alternate_function_syntax # not fully implemented yet
# cpp0x_hash_types # not fully implemented yet
# cpp0x_unrestricted_unions # not supported by any compilers yet

View file

@ -0,0 +1,23 @@
%module cpp0x_rvalue_reference
%inline %{
class A {
public:
int getAcopy() { return _a; }
int *getAptr() { return &_a; }
int &getAref() { return _a; }
int &&getAmove() { return _a; }
void setAcopy(int a) { _a = a; }
void setAptr(int *a) { _a = *a; }
void setAref(int &a) { _a = a; }
void setAmove(int &&a) { _a = a; }
void arg(int a);
void arg(int *a);
void arg(int &a);
// void arg(int &&a); // redefinition not allowed
private:
int _a;
};
%}

View file

@ -0,0 +1,22 @@
import cpp0x_rvalue_reference
a = cpp0x_rvalue_reference.A()
a.setAcopy(5)
if a.getAcopy() != 5:
raise RunTimeError, "int A::getAcopy() value is ", a.getAcopy(), " should be 5"
ptr = a.getAptr()
a.setAptr(ptr)
if a.getAcopy() != 5:
raise RunTimeError, "after A::setAptr(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"
a.setAref(ptr)
if a.getAcopy() != 5:
raise RunTimeError, "after A::setAref(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"
a.setAmove(ptr)
if a.getAcopy() != 5:
raise RunTimeError, "after A::setAmove(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"