%module li_std_string %include #if defined(SWIGUTL) %apply std::string& INPUT { std::string &input } %apply std::string& INOUT { std::string &inout } #endif %inline %{ std::string test_value(std::string x) { return x; } const std::string& test_const_reference(const std::string &x) { return x; } void test_pointer(std::string *x) { } std::string *test_pointer_out() { static std::string x = "x"; return &x; } void test_const_pointer(const std::string *x) { } const std::string *test_const_pointer_out() { static std::string x = "x"; return &x; } void test_reference(std::string &x) { } std::string& test_reference_out() { static std::string x = "test_reference_out message"; return x; } std::string test_reference_input(std::string &input) { return input; } void test_reference_inout(std::string &inout) { inout += inout; } #if defined(_MSC_VER) #pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow) #endif void test_throw() throw(std::string){ static std::string x = "test_throw message"; throw x; } void test_const_reference_throw() throw(const std::string &){ static std::string x = "test_const_reference_throw message"; throw x; } void test_pointer_throw() throw(std::string *) { throw new std::string("foo"); } void test_const_pointer_throw() throw(const std::string *) { throw new std::string("foo"); } #if defined(_MSC_VER) #pragma warning(default: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow) #endif %} /* Old way, now std::string is a %naturalvar by default %apply const std::string& { std::string *GlobalString2, std::string *MemberString2, std::string *Structure::StaticMemberString2 }; */ #ifdef SWIGSCILAB %rename(St) MemberString; %rename(Str) MemberString; %rename(Str2) MemberString2; %rename(StaticStr) StaticMemberString; %rename(StaticStr2) StaticMemberString2; %rename(ConstStr) ConstMemberString; %rename(ConstStaticStr) ConstStaticMemberString; #endif %inline %{ std::string GlobalString; std::string GlobalString2 = "global string 2"; const std::string ConstGlobalString = "const global string"; struct Structure { std::string MemberString; std::string MemberString2; static std::string StaticMemberString; static std::string StaticMemberString2; const std::string ConstMemberString; static const std::string ConstStaticMemberString; Structure() : MemberString2("member string 2"), ConstMemberString("const member string") {} }; %} %{ std::string Structure::StaticMemberString = "static member string"; std::string Structure::StaticMemberString2 = "static member string 2"; const std::string Structure::ConstStaticMemberString = "const static member string"; %} %inline %{ class Foo { public: unsigned long long test(unsigned long long l) { return l + 1; } std::string test(std::string l) { return l + "1"; } unsigned long long testl(unsigned long long l) { return l + 1; } }; %} %inline %{ std::string stdstring_empty() { return std::string(); } char *c_empty() { return (char *)""; } char *c_null() { return 0; } const char *get_null(const char *a) { return a == 0 ? a : "non-null"; } %}