swig/Lib/javascript/jsc/std_string.i
2013-09-16 01:33:19 +02:00

69 lines
1.5 KiB
OpenEdge ABL
Executable file

/* -----------------------------------------------------------------------------
* std_string.i
*
* Typemaps for const std::string&.
* To use non-const std::string references use the following %apply:
* %apply const std::string & {std::string &};
*
* ----------------------------------------------------------------------------- */
%{
#include <string>
std::string SWIGJSC_valueToString(JSContextRef context, JSValueRef value) {
JSStringRef jsstring = JSValueToStringCopy(context, value, /* JSValueRef *exception */ 0);
unsigned int length = JSStringGetLength(jsstring);
char *cstr = new char[length + 1];
JSStringGetUTF8CString(jsstring, cstr, length + 1);
// create a copy
std::string result(cstr);
JSStringRelease(jsstring);
delete[] cstr;
return result;
}
JSValueRef SWIGJSC_stringToValue(JSContextRef context, const std::string& s)
{
JSValueRef result;
JSStringRef jsstring = JSStringCreateWithUTF8CString(s.c_str());
result = JSValueMakeString(context, jsstring);
JSStringRelease(jsstring);
return result;
}
%}
namespace std {
%naturalvar string;
class string;
%typemap(in) string
%{
$1 = SWIGJSC_valueToString(context, $input);
%}
%typemap(in) const string &
%{
$1 = new std::string(SWIGJSC_valueToString(context, $input));
%}
%typemap(freearg) const string &
%{
delete $1;
%}
%typemap(out) string
%{
$result = SWIGJSC_stringToValue(context, $1);
%}
%typemap(out) const string &
%{
$result = SWIGJSC_stringToValue(context, *$1);
%}
}