blob: 1dbccd4964f59b9511cb5e0c7e2892c3fb36403f [file] [log] [blame]
%module assign_reference
// Copy of cpp11_assign_delete.i testcase with deleted assignment operators replaced by reference member variables
%rename(Assign) *::operator=;
// (1) Test directly non-assignable member variables
%inline %{
int GlobalInt = 0;
int& getGlobalIntRef() { return GlobalInt; }
struct AssignPublic {
AssignPublic() : PublicMember(GlobalInt) {}
int &PublicMember;
};
struct AssignProtected {
AssignProtected() : ProtectedMember(GlobalInt) {}
protected:
int &ProtectedMember;
};
typedef const int& ConstIntRef; // also check typedef resolution
struct AssignPrivate {
AssignPrivate() : PrivateMember(GlobalInt) {}
private:
ConstIntRef PrivateMember;
};
struct MemberVars {
// These will only have getters
AssignPublic MemberPublic;
AssignProtected MemberProtected;
AssignPrivate MemberPrivate;
};
// (2) Test indirectly non-assignable member variables via inheritance
struct AssignPublicDerived : AssignPublic {};
struct AssignProtectedDerived : AssignProtected {};
struct AssignPrivateDerived : AssignPrivate {};
struct AssignPublicDerivedSettable : AssignPublic {
AssignPublicDerivedSettable& operator=(const AssignPublicDerivedSettable &) { return *this; }
};
struct AssignProtectedDerivedSettable : AssignProtected {
AssignProtectedDerivedSettable& operator=(const AssignProtectedDerivedSettable &) { return *this; }
};
struct AssignPrivateDerivedSettable : AssignPrivate {
AssignPrivateDerivedSettable& operator=(const AssignPrivateDerivedSettable &) { return *this; }
};
struct InheritedMemberVars {
// These will only have getters
AssignPublicDerived MemberPublicDerived;
AssignProtectedDerived MemberProtectedDerived;
AssignPrivateDerived MemberPrivateDerived;
static AssignPublicDerived StaticMemberPublicDerived;
static AssignProtectedDerived StaticMemberProtectedDerived;
static AssignPrivateDerived StaticMemberPrivateDerived;
// These will have getters and setters
AssignPublicDerivedSettable MemberPublicDerivedSettable;
AssignProtectedDerivedSettable MemberProtectedDerivedSettable;
AssignPrivateDerivedSettable MemberPrivateDerivedSettable;
static AssignPublicDerivedSettable StaticMemberPublicDerivedSettable;
static AssignProtectedDerivedSettable StaticMemberProtectedDerivedSettable;
static AssignPrivateDerivedSettable StaticMemberPrivateDerivedSettable;
};
AssignPublicDerived InheritedMemberVars::StaticMemberPublicDerived;
AssignProtectedDerived InheritedMemberVars::StaticMemberProtectedDerived;
AssignPrivateDerived InheritedMemberVars::StaticMemberPrivateDerived;
AssignPublicDerivedSettable InheritedMemberVars::StaticMemberPublicDerivedSettable;
AssignProtectedDerivedSettable InheritedMemberVars::StaticMemberProtectedDerivedSettable;
AssignPrivateDerivedSettable InheritedMemberVars::StaticMemberPrivateDerivedSettable;
// These will only have getters
AssignPublicDerived GlobalPublicDerived;
AssignProtectedDerived GlobalProtectedDerived;
AssignPrivateDerived GlobalPrivateDerived;
// These will have getters and setters
AssignPublicDerivedSettable GlobalPublicDerivedSettable;
AssignProtectedDerivedSettable GlobalProtectedDerivedSettable;
AssignPrivateDerivedSettable GlobalPrivateDerivedSettable;
%}
// (3) Test indirectly non-assignable member variables via classes that themselves have non-assignable member variables
%inline %{
struct MemberPublicVar {
AssignPublic MemberPublic;
};
struct MemberProtectedVar {
protected:
AssignProtected MemberProtected;
};
struct MemberPrivateVar {
private:
AssignPrivate MemberPrivate;
};
struct MembersMemberVars {
// These will only have getters
MemberPublicVar MemberPublic;
MemberProtectedVar MemberProtected;
MemberPrivateVar MemberPrivate;
};
struct StaticMembersMemberVars {
static MemberPublicVar StaticMemberPublic;
static MemberProtectedVar StaticMemberProtected;
static MemberPrivateVar StaticMemberPrivate;
};
MemberPublicVar StaticMembersMemberVars::StaticMemberPublic;
MemberProtectedVar StaticMembersMemberVars::StaticMemberProtected;
MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
MemberPublicVar GlobalMemberPublic;
MemberProtectedVar GlobalMemberProtected;
MemberPrivateVar GlobalMemberPrivate;
// Setters and getters available
struct StaticMembersMemberVarsHolder {
StaticMembersMemberVars Member;
};
StaticMembersMemberVars GlobalStaticMembersMemberVars;
%}