blob: ba0c9ced4fa667b683e41d61dc56e5b8d620603c [file] [log] [blame]
%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;
%}