summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/perl5/jstring.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/perl5/jstring.i')
-rw-r--r--share/swig/2.0.11/perl5/jstring.i48
1 files changed, 48 insertions, 0 deletions
diff --git a/share/swig/2.0.11/perl5/jstring.i b/share/swig/2.0.11/perl5/jstring.i
new file mode 100644
index 0000000..1c179b7
--- /dev/null
+++ b/share/swig/2.0.11/perl5/jstring.i
@@ -0,0 +1,48 @@
+%include <typemaps/valtypes.swg>
+
+%fragment(SWIG_AsVal_frag(jstring),"header") {
+SWIGINTERN int
+SWIG_AsVal_dec(jstring)(SV *obj, jstring *val)
+{
+ if (SvPOK(obj)) {
+ if (val) {
+ STRLEN len = 0;
+ char *cstr = SvPV(obj, len);
+ *val = JvNewStringLatin1(cstr, len);
+ }
+ return SWIG_OK;
+ }
+ return SWIG_ERROR;
+}
+}
+
+%fragment(SWIG_From_frag(jstring),"header") {
+SWIGINTERNINLINE SV *
+SWIG_From_dec(jstring)(jstring val)
+{
+ SV *obj = sv_newmortal();
+ if (!val) {
+ sv_setsv(obj, &PL_sv_undef);
+ } else {
+ jsize len = JvGetStringUTFLength(val);
+ if (!len) {
+ sv_setsv(obj, &PL_sv_undef);
+ } else {
+ char *tmp = %new_array(len, char);
+ JvGetStringUTFRegion(val, 0, len, tmp);
+ sv_setpvn(obj, tmp, len);
+ SvUTF8_on(obj);
+ %delete_array(tmp);
+ }
+ }
+ return obj;
+}
+}
+
+%typemaps_asvalfrom(%checkcode(STRING),
+ %arg(SWIG_AsVal(jstring)),
+ %arg(SWIG_From(jstring)),
+ %arg(SWIG_AsVal_frag(jstring)),
+ %arg(SWIG_From_frag(jstring)),
+ java::lang::String *);
+