| %module assign_const |
| |
| %{ |
| #if defined(_MSC_VER) |
| #pragma warning(disable : 4351) // warning C4351: new behavior: elements of array 'AssignArray::ArrayMember' will be default initialized |
| #endif |
| %} |
| |
| // Similar to assign_reference.i testcase but reference member variables replaced by const members |
| |
| %rename(Assign) *::operator=; |
| |
| // (1) Test directly non-assignable member variables |
| %inline %{ |
| struct AssignValue { |
| AssignValue() : ValueMember() {} |
| const int ValueMember; |
| }; |
| |
| struct AssignArray { |
| AssignArray() : ArrayMember() {} |
| const int ArrayMember[1]; |
| }; |
| |
| struct AssignPtr { |
| AssignPtr() : PtrMember() {} |
| int *const PtrMember; |
| }; |
| |
| struct AssignMatrix { |
| AssignMatrix() : MatrixMember() {} |
| const int MatrixMember[2][2]; |
| }; |
| |
| struct MemberVars { |
| // These will only have getters |
| AssignValue MemberValue; |
| AssignArray MemberArray; |
| AssignPtr MemberPtr; |
| AssignMatrix MemberMatrix; |
| }; |
| |
| // (2) Test indirectly non-assignable member variables via inheritance |
| struct AssignValueDerived : AssignValue {}; |
| struct AssignArrayDerived : AssignArray {}; |
| struct AssignPtrDerived : AssignPtr {}; |
| struct AssignMatrixDerived : AssignMatrix {}; |
| struct AssignValueDerivedSettable : AssignValue { |
| AssignValueDerivedSettable& operator=(const AssignValueDerivedSettable &) { return *this; } |
| }; |
| struct AssignArrayDerivedSettable : AssignArray { |
| AssignArrayDerivedSettable& operator=(const AssignArrayDerivedSettable &) { return *this; } |
| }; |
| struct AssignPtrDerivedSettable : AssignPtr { |
| AssignPtrDerivedSettable& operator=(const AssignPtrDerivedSettable &) { return *this; } |
| }; |
| struct AssignMatrixDerivedSettable : AssignMatrix { |
| AssignMatrixDerivedSettable& operator=(const AssignMatrixDerivedSettable &) { return *this; } |
| }; |
| |
| struct InheritedMemberVars { |
| // These will only have getters |
| AssignValueDerived MemberValueDerived; |
| AssignArrayDerived MemberArrayDerived; |
| AssignPtrDerived MemberPtrDerived; |
| AssignMatrixDerived MemberMatrixDerived; |
| |
| static AssignValueDerived StaticMemberValueDerived; |
| static AssignArrayDerived StaticMemberArrayDerived; |
| static AssignPtrDerived StaticMemberPtrDerived; |
| static AssignMatrixDerived StaticMemberMatrixDerived; |
| |
| // These will have getters and setters |
| AssignValueDerivedSettable MemberValueDerivedSettable; |
| AssignArrayDerivedSettable MemberArrayDerivedSettable; |
| AssignPtrDerivedSettable MemberPtrDerivedSettable; |
| AssignMatrixDerivedSettable MemberMatrixDerivedSettable; |
| |
| static AssignValueDerivedSettable StaticMemberValueDerivedSettable; |
| static AssignArrayDerivedSettable StaticMemberArrayDerivedSettable; |
| static AssignPtrDerivedSettable StaticMemberPtrDerivedSettable; |
| static AssignMatrixDerivedSettable StaticMemberMatrixDerivedSettable; |
| }; |
| |
| AssignValueDerived InheritedMemberVars::StaticMemberValueDerived; |
| AssignArrayDerived InheritedMemberVars::StaticMemberArrayDerived; |
| AssignPtrDerived InheritedMemberVars::StaticMemberPtrDerived; |
| AssignMatrixDerived InheritedMemberVars::StaticMemberMatrixDerived; |
| |
| AssignValueDerivedSettable InheritedMemberVars::StaticMemberValueDerivedSettable; |
| AssignArrayDerivedSettable InheritedMemberVars::StaticMemberArrayDerivedSettable; |
| AssignPtrDerivedSettable InheritedMemberVars::StaticMemberPtrDerivedSettable; |
| AssignMatrixDerivedSettable InheritedMemberVars::StaticMemberMatrixDerivedSettable; |
| |
| // These will only have getters |
| AssignValueDerived GlobalValueDerived; |
| AssignArrayDerived GlobalArrayDerived; |
| AssignPtrDerived GlobalPtrDerived; |
| AssignMatrixDerived GlobalMatrixDerived; |
| |
| // These will have getters and setters |
| AssignValueDerivedSettable GlobalValueDerivedSettable; |
| AssignArrayDerivedSettable GlobalArrayDerivedSettable; |
| AssignPtrDerivedSettable GlobalPtrDerivedSettable; |
| AssignMatrixDerivedSettable GlobalMatrixDerivedSettable; |
| %} |
| |
| // (3) Test indirectly non-assignable member variables via classes that themselves have non-assignable member variables |
| %inline %{ |
| struct MemberValueVar { |
| AssignValue MemberValue; |
| }; |
| |
| struct MemberArrayVar { |
| AssignArray MemberArray; |
| }; |
| |
| struct MemberPtrVar { |
| AssignPtr MemberPtr; |
| }; |
| |
| struct MemberMatrixVar { |
| AssignMatrix MemberMatrix; |
| }; |
| |
| struct MembersMemberVars { |
| // These will only have getters |
| MemberValueVar MemberValue; |
| MemberArrayVar MemberArray; |
| MemberPtrVar MemberPtr; |
| MemberMatrixVar MemberMatrix; |
| }; |
| |
| struct StaticMembersMemberVars { |
| static MemberValueVar StaticMemberValue; |
| static MemberArrayVar StaticMemberArray; |
| static MemberPtrVar StaticMemberPtr; |
| static MemberMatrixVar StaticMemberMatrix; |
| }; |
| MemberValueVar StaticMembersMemberVars::StaticMemberValue; |
| MemberArrayVar StaticMembersMemberVars::StaticMemberArray; |
| MemberPtrVar StaticMembersMemberVars::StaticMemberPtr; |
| MemberMatrixVar StaticMembersMemberVars::StaticMemberMatrix; |
| |
| MemberValueVar GlobalMemberValue; |
| MemberArrayVar GlobalMemberArray; |
| MemberPtrVar GlobalMemberPtr; |
| MemberMatrixVar GlobalMemberMatrix; |
| |
| // Setters and getters available |
| struct StaticMembersMemberVarsHolder { |
| StaticMembersMemberVars Member; |
| }; |
| StaticMembersMemberVars GlobalStaticMembersMemberVars; |
| %} |