%module nested_class #pragma SWIG nowarn=SWIGWARN_PARSE_UNNAMED_NESTED_CLASS %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerStruct1; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerClass1; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerUnion1; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerClass2; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerStruct2; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerUnion2; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerClass4Typedef; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerStruct4Typedef; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerUnion4Typedef; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerClass5; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerStruct5; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerUnion5; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerMultiple; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerMultipleDerived; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerMultipleAnonTypedef1; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerMultipleNamedTypedef; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::InnerSameName; %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer2::IgnoreMe; %inline %{ struct Outer { typedef int Integer; /////////////////////////////////////////// struct InnerStruct1 { Integer x; }; class InnerClass1 { public: Integer x; }; union InnerUnion1 { Integer x; double y; }; /////////////////////////////////////////// class { public: Integer a; }; struct { Integer b; }; union { Integer c; double d; }; /////////////////////////////////////////// class InnerClass2 { public: Integer x; } InnerClass2Instance; struct InnerStruct2 { Integer x; } InnerStruct2Instance; union InnerUnion2 { Integer x; double y; } InnerUnion2Instance; /////////////////////////////////////////// class { public: Integer x; } InnerClass3Instance; struct { Integer x; } InnerStruct3Instance; union { Integer x; double y; } InnerUnion3Instance; /////////////////////////////////////////// typedef class { public: Integer x; } InnerClass4Typedef; typedef struct { Integer x; } InnerStruct4Typedef; typedef union { Integer x; double y; } InnerUnion4Typedef; /////////////////////////////////////////// typedef class InnerClass5 { public: Integer x; } InnerClass5Typedef; typedef struct InnerStruct5 { Integer x; } InnerStruct5Typedef; typedef union InnerUnion5 { Integer x; double y; } InnerUnion5Typedef; // bug #909387 - inner declared types are treated as forward declarations InnerStruct1* makeInnerStruct1() { return 0; } InnerClass1* makeInnerClass1() { return 0; } InnerUnion1* makeInnerUnion1() { return 0; } InnerStruct2* makeInnerStruct2() { return 0; } InnerClass2* makeInnerClass2() { return 0; } InnerUnion2* makeInnerUnion2() { return 0; } InnerStruct4Typedef* makeInnerStruct4Typedef() { return 0; } InnerClass4Typedef* makeInnerClass4Typedef() { return 0; } InnerUnion4Typedef* makeInnerUnion4Typedef() { return 0; } InnerStruct5* makeInnerStruct5() { return 0; } InnerClass5* makeInnerClass5() { return 0; } InnerUnion5* makeInnerUnion5() { return 0; } InnerStruct5Typedef* makeInnerStruct5Typedef() { return 0; } InnerClass5Typedef* makeInnerClass5Typedef() { return 0; } InnerUnion5Typedef* makeInnerUnion5Typedef() { return 0; } /////////////////////////////////////////// struct InnerMultiple { Integer x; } MultipleInstance1, MultipleInstance2, *MultipleInstance3, MultipleInstance4[2]; struct InnerMultipleDerived : public InnerMultiple { Integer xx; } MultipleDerivedInstance1, MultipleDerivedInstance2, *MultipleDerivedInstance3, MultipleDerivedInstance4[2]; struct { Integer x; } MultipleInstanceAnon1, MultipleInstanceAnon2, *MultipleInstanceAnon3, MultipleInstanceAnon4[2]; struct : public InnerMultiple { Integer xx; } MultipleInstanceAnonDerived1, MultipleInstanceAnonDerived2, *MultipleInstanceAnonDerived3, MultipleInstanceAnonDerived4[2]; struct : public InnerMultiple { Integer xx; }; class : public InnerMultiple { public: Integer yy; }; /////////////////////////////////////////// typedef struct { Integer x; } InnerMultipleAnonTypedef1, InnerMultipleAnonTypedef2, *InnerMultipleAnonTypedef3; InnerMultipleAnonTypedef1* makeInnerMultipleAnonTypedef1() { return 0; } InnerMultipleAnonTypedef2* makeInnerMultipleAnonTypedef2() { return 0; } InnerMultipleAnonTypedef3* makeInnerMultipleAnonTypedef3() { return 0; } typedef struct InnerMultipleNamedTypedef { Integer x; } InnerMultipleNamedTypedef1, InnerMultipleNamedTypedef2, *InnerMultipleNamedTypedef3; InnerMultipleNamedTypedef* makeInnerMultipleNamedTypedef() { return 0; } InnerMultipleNamedTypedef1* makeInnerMultipleNamedTypedef1() { return 0; } InnerMultipleNamedTypedef2* makeInnerMultipleNamedTypedef2() { return 0; } InnerMultipleNamedTypedef3* makeInnerMultipleNamedTypedef3() { return 0; } /////////////////////////////////////////// typedef struct InnerSameName { Integer x; } InnerSameName; InnerSameName* makeInnerSameName() { return 0; } }; %} // Ignore nested struct instance %ignore Outer2::IgnoreMeInstance; %{ struct Outer2 { struct IgnoreMe { int xx; }; }; %} struct Outer2 { struct IgnoreMe { int xx; } IgnoreMeInstance; };