PageRenderTime 40ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/python/jstring.i

#
Swig | 72 lines | 66 code | 6 blank | 0 comment | 0 complexity | 1ce9a906c1d1a8302b42e46cdc4b65ae MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %include <typemaps/valtypes.swg>
  2. %fragment(SWIG_AsVal_frag(jstring),"header") {
  3. SWIGINTERN int
  4. SWIG_AsVal(jstring)(PyObject *obj, jstring *val)
  5. {
  6. if (obj == Py_None) {
  7. if (val) *val = 0;
  8. return SWIG_OK;
  9. }
  10. PyObject *tmp = 0;
  11. int isunicode = PyUnicode_Check(obj);
  12. if (!isunicode && PyString_Check(obj)) {
  13. if (val) {
  14. obj = tmp = PyUnicode_FromObject(obj);
  15. }
  16. isunicode = 1;
  17. }
  18. if (isunicode) {
  19. if (val) {
  20. if (sizeof(Py_UNICODE) == sizeof(jchar)) {
  21. *val = JvNewString((const jchar *) PyUnicode_AS_UNICODE(obj),PyUnicode_GET_SIZE(obj));
  22. return SWIG_NEWOBJ;
  23. } else {
  24. int len = PyUnicode_GET_SIZE(obj);
  25. Py_UNICODE *pchars = PyUnicode_AS_UNICODE(obj);
  26. *val = JvAllocString (len);
  27. jchar *jchars = JvGetStringChars (*val);
  28. for (int i = 0; i < len; ++i) {
  29. jchars[i] = pchars[i];
  30. }
  31. return SWIG_NEWOBJ;
  32. }
  33. }
  34. Py_XDECREF(tmp);
  35. return SWIG_OK;
  36. }
  37. return SWIG_TypeError;
  38. }
  39. }
  40. %fragment(SWIG_From_frag(jstring),"header") {
  41. SWIGINTERNINLINE PyObject *
  42. SWIG_From(jstring)(jstring val)
  43. {
  44. if (!val) {
  45. return SWIG_Py_Void();
  46. }
  47. if (sizeof(Py_UNICODE) == sizeof(jchar)) {
  48. return PyUnicode_FromUnicode((const Py_UNICODE *) JvGetStringChars(val),
  49. JvGetStringUTFLength(val));
  50. } else {
  51. int len = JvGetStringUTFLength(val);
  52. Py_UNICODE pchars[len];
  53. jchar *jchars = JvGetStringChars(val);
  54. for (int i = 0; i < len; i++) {
  55. pchars[i] = jchars[i];
  56. }
  57. return PyUnicode_FromUnicode((const Py_UNICODE *) pchars, len);
  58. }
  59. }
  60. }
  61. %typemaps_asvalfrom(%checkcode(STRING),
  62. %arg(SWIG_AsVal(jstring)),
  63. %arg(SWIG_From(jstring)),
  64. %arg(SWIG_AsVal_frag(jstring)),
  65. %arg(SWIG_From_frag(jstring)),
  66. java::lang::String *);