%module cpp11_assign_delete %rename(Assign) *::operator=; // (1) Test directly non-assignable member variables %inline %{ struct AssignPublic { AssignPublic& operator=(const AssignPublic &) = delete; }; struct AssignProtected { protected: AssignProtected& operator=(const AssignProtected &) = delete; }; struct AssignPrivate { private: AssignPrivate& operator=(const AssignPrivate &) = delete; }; struct MemberVars { // These will only have getters AssignPublic MemberPublic; AssignProtected MemberProtected; AssignPrivate MemberPrivate; }; struct MemberArrayVars { // These will only have getters AssignPublic ArrayMemberPublic[1]; AssignProtected ArrayMemberProtected[1]; AssignPrivate ArrayMemberPrivate[1]; }; // (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; %} // (4) Test indirectly non-assignable member variables via classes that themselves have non-assignable array member variables %inline %{ struct MemberPublicArrayVar { AssignPublic MemberPublic[1]; }; struct MemberProtectedArrayVar { protected: AssignProtected MemberProtected[1]; }; struct MemberPrivateArrayVar { private: AssignPrivate MemberPrivate[1]; }; struct MembersMemberArrayVars { // These will only have getters MemberPublicArrayVar MemberPublic; MemberProtectedArrayVar MemberProtected; MemberPrivateArrayVar MemberPrivate; }; struct StaticMembersMemberArrayVars { static MemberPublicArrayVar StaticMemberPublic; static MemberProtectedArrayVar StaticMemberProtected; static MemberPrivateArrayVar StaticMemberPrivate; }; MemberPublicArrayVar StaticMembersMemberArrayVars::StaticMemberPublic; MemberProtectedArrayVar StaticMembersMemberArrayVars::StaticMemberProtected; MemberPrivateArrayVar StaticMembersMemberArrayVars::StaticMemberPrivate; MemberPublicArrayVar GlobalArrayMemberPublic; MemberProtectedArrayVar GlobalArrayMemberProtected; MemberPrivateArrayVar GlobalArrayMemberPrivate; // Setters and getters available struct StaticMembersMemberArrayVarsHolder { StaticMembersMemberArrayVars Member; }; StaticMembersMemberArrayVars GlobalStaticMembersMemberArrayVars; %} // (5) Test indirectly non-assignable member variables via classes that themselves have non-assignable reference member variables %inline %{ AssignPublic GlobalAssignPublic; AssignProtected GlobalAssignProtected; AssignPrivate GlobalAssignPrivate; struct MemberPublicRefVar { AssignPublic& MemberRefVarPublic; MemberPublicRefVar() : MemberRefVarPublic(GlobalAssignPublic) {} }; struct MemberProtectedRefVar { MemberProtectedRefVar() : MemberRefVarProtected(GlobalAssignProtected) {} protected: AssignProtected& MemberRefVarProtected; }; struct MemberPrivateRefVar { MemberPrivateRefVar() : MemberRefVarPrivate(GlobalAssignPrivate) {} private: AssignPrivate& MemberRefVarPrivate; }; struct MembersMemberRefVars { // These will only have getters MemberPublicRefVar MemberPublic; MemberProtectedRefVar MemberProtected; MemberPrivateRefVar MemberPrivate; }; struct StaticMembersMemberRefVars { static MemberPublicRefVar StaticMemberPublic; static MemberProtectedRefVar StaticMemberProtected; static MemberPrivateRefVar StaticMemberPrivate; }; MemberPublicRefVar StaticMembersMemberRefVars::StaticMemberPublic; MemberProtectedRefVar StaticMembersMemberRefVars::StaticMemberProtected; MemberPrivateRefVar StaticMembersMemberRefVars::StaticMemberPrivate; MemberPublicRefVar GlobalRefMemberPublic; MemberProtectedRefVar GlobalRefMemberProtected; MemberPrivateRefVar GlobalRefMemberPrivate; // Setters and getters available struct StaticMembersMemberRefVarsHolder { StaticMembersMemberRefVars Member; }; StaticMembersMemberRefVars GlobalStaticMembersMemberRefVars; %}