jstring.i 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. %include <typemaps/valtypes.swg>
  2. %fragment(SWIG_AsVal_frag(jstring),"header") {
  3. SWIGINTERN int
  4. SWIG_AsVal_dec(jstring)(SV *obj, jstring *val)
  5. {
  6. if (SvPOK(obj)) {
  7. if (val) {
  8. STRLEN len = 0;
  9. char *cstr = SvPV(obj, len);
  10. *val = JvNewStringLatin1(cstr, len);
  11. }
  12. return SWIG_OK;
  13. }
  14. return SWIG_ERROR;
  15. }
  16. }
  17. %fragment(SWIG_From_frag(jstring),"header") {
  18. SWIGINTERNINLINE SV *
  19. SWIG_From_dec(jstring)(jstring val)
  20. {
  21. SV *obj = sv_newmortal();
  22. if (!val) {
  23. sv_setsv(obj, &PL_sv_undef);
  24. } else {
  25. jsize len = JvGetStringUTFLength(val);
  26. if (!len) {
  27. sv_setsv(obj, &PL_sv_undef);
  28. } else {
  29. char *tmp = %new_array(len, char);
  30. JvGetStringUTFRegion(val, 0, len, tmp);
  31. sv_setpvn(obj, tmp, len);
  32. SvUTF8_on(obj);
  33. %delete_array(tmp);
  34. }
  35. }
  36. return obj;
  37. }
  38. }
  39. %typemaps_asvalfrom(%checkcode(STRING),
  40. %arg(SWIG_AsVal(jstring)),
  41. %arg(SWIG_From(jstring)),
  42. %arg(SWIG_AsVal_frag(jstring)),
  43. %arg(SWIG_From_frag(jstring)),
  44. java::lang::String *);