/trunk/Lib/d/std_string.i
Swig | 98 lines | 68 code | 19 blank | 11 comment | 0 complexity | 4b9517621f8a1743ae10aa8c28c96dcc MD5 | raw file
1/* ----------------------------------------------------------------------------- 2 * std_string.i 3 * 4 * Typemaps for std::string and const std::string& 5 * These are mapped to a D char[] and are passed around by value. 6 * 7 * To use non-const std::string references, use the following %apply. Note 8 * that they are passed by value. 9 * %apply const std::string & {std::string &}; 10 * ----------------------------------------------------------------------------- */ 11 12%{ 13#include <string> 14%} 15 16namespace std { 17 18%naturalvar string; 19 20class string; 21 22%define SWIGD_STD_STRING_TYPEMAPS(DW_STRING_TYPE, DP_STRING_TYPE, FROM_STRINGZ, TO_STRINGZ) 23// string 24%typemap(ctype) string, const string & "char *" 25%typemap(imtype) string, const string & #DW_STRING_TYPE 26%typemap(dtype) string, const string & #DP_STRING_TYPE 27 28%typemap(in, canthrow=1) string, const string & 29%{ if (!$input) { 30 SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "null string"); 31 return $null; 32 } 33 $1.assign($input); %} 34%typemap(in, canthrow=1) const string & 35%{ if (!$input) { 36 SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "null string"); 37 return $null; 38 } 39 std::string $1_str($input); 40 $1 = &$1_str; %} 41 42%typemap(out) string %{ $result = SWIG_d_string_callback($1.c_str()); %} 43%typemap(out) const string & %{ $result = SWIG_d_string_callback($1->c_str()); %} 44 45%typemap(din) string, const string & "($dinput ? TO_STRINGZ($dinput) : null)" 46%typemap(dout, excode=SWIGEXCODE) string, const string & { 47 DP_STRING_TYPE ret = FROM_STRINGZ($imcall);$excode 48 return ret; 49} 50 51%typemap(directorin) string, const string & %{ $input = SWIG_d_string_callback($1.c_str()); %} 52 53%typemap(directorout, canthrow=1) string 54%{ if (!$input) { 55 SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "null string"); 56 return $null; 57 } 58 $result.assign($input); %} 59 60%typemap(directorout, canthrow=1, warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const string & 61%{ if (!$input) { 62 SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "null string"); 63 return $null; 64 } 65 /* possible thread/reentrant code problem */ 66 static std::string $1_str; 67 $1_str = $input; 68 $result = &$1_str; %} 69 70%typemap(ddirectorin) string, const string & "FROM_STRINGZ($winput)" 71%typemap(ddirectorout) string, const string & "TO_STRINGZ($dcall)" 72 73%typemap(throws, canthrow=1) string, const string & 74%{ SWIG_DSetPendingException(SWIG_DException, $1.c_str()); 75 return $null; %} 76 77%typemap(typecheck) string, const string & = char *; 78%enddef 79 80// We need to have the \0-terminated string conversion functions available in 81// the D proxy modules. 82#if (SWIG_D_VERSION == 1) 83// Could be easily extended to support Phobos as well. 84SWIGD_STD_STRING_TYPEMAPS(char*, char[], tango.stdc.stringz.fromStringz, tango.stdc.stringz.toStringz) 85 86%pragma(d) globalproxyimports = "static import tango.stdc.stringz;"; 87#else 88SWIGD_STD_STRING_TYPEMAPS(const(char)*, string, std.conv.to!string, std.string.toStringz) 89 90%pragma(d) globalproxyimports = %{ 91static import std.conv; 92static import std.string; 93%} 94#endif 95 96#undef SWIGD_STD_STRING_TYPEMAPS 97 98} // namespace std