// C++ namespace tests %module cpp_namespace %inline %{ typedef int Bad; /* A very basic namespace */ namespace example { typedef char *Bad; int fact(int n) { if (n <= 0) return 1; else return n*fact(n-1); } int Foo = 42; class Test { public: Test() { } ~Test() { } char *method() { return (char *) "Test::method"; } }; typedef Test *TestPtr; void weird(Bad x, ::Bad y) { } } char *do_method(example::TestPtr t) { return t->method(); } namespace ex = example; char *do_method2(ex::TestPtr t) { return t->method(); } %} // Some more complicated namespace examples %inline %{ namespace Foo { typedef int Integer; class Test2 { public: virtual ~Test2() { } virtual char *method() { return (char *) "Test2::method"; } }; typedef Test2 *Test2Ptr; } namespace Foo2 { using Foo::Integer; using Foo::Test2; class Test3 : public Test2 { public: virtual char *method() { return (char *) "Test3::method"; } }; typedef Test3 *Test3Ptr; typedef Test3 Test3Alt; } namespace Foo3 { using namespace Foo2; class Test4 : public Test3 { public: virtual char *method() { return (char *) "Test4::method"; } }; Integer foo3(Integer x) { return x; } typedef Test4 *Test4Ptr; } using Foo2::Test3Alt; using Foo3::Integer; class Test5 : public Test3Alt { public: virtual char *method() { return (char *) "Test5::method"; } }; char *do_method3(Foo::Test2 *t, Integer x) { return t->method(); } %}