import source from 1.3.40
[external/swig.git] / Lib / python / jstring.i
1 %include <typemaps/valtypes.swg>
2
3 %fragment(SWIG_AsVal_frag(jstring),"header") {
4 SWIGINTERN int
5 SWIG_AsVal(jstring)(PyObject *obj, jstring *val)
6 {
7   if (obj == Py_None) {
8     if (val) *val = 0;
9     return SWIG_OK;
10   }
11   
12   PyObject *tmp = 0;
13   int isunicode = PyUnicode_Check(obj);
14   if (!isunicode && PyString_Check(obj)) {
15     if (val) {
16       obj = tmp = PyUnicode_FromObject(obj);
17     }
18     isunicode = 1;
19   }
20   if (isunicode) {
21     if (val) {
22       if (sizeof(Py_UNICODE) == sizeof(jchar)) {
23         *val = JvNewString((const jchar *) PyUnicode_AS_UNICODE(obj),PyUnicode_GET_SIZE(obj));
24         return SWIG_NEWOBJ;
25       } else {
26         int len = PyUnicode_GET_SIZE(obj);
27         Py_UNICODE *pchars = PyUnicode_AS_UNICODE(obj);
28         *val = JvAllocString (len);
29         jchar *jchars = JvGetStringChars (*val);        
30         for (int i = 0; i < len; ++i) {
31           jchars[i] = pchars[i];
32         }
33         return SWIG_NEWOBJ;
34       }
35     }
36     Py_XDECREF(tmp);
37     return SWIG_OK;
38   }
39   return SWIG_TypeError;
40 }
41 }
42
43 %fragment(SWIG_From_frag(jstring),"header") {
44 SWIGINTERNINLINE PyObject *
45 SWIG_From(jstring)(jstring val)
46 {
47   if (!val) {
48     return SWIG_Py_Void();
49   } 
50   if (sizeof(Py_UNICODE) == sizeof(jchar)) {    
51     return PyUnicode_FromUnicode((const Py_UNICODE *) JvGetStringChars(val),
52                                  JvGetStringUTFLength(val));
53   } else {
54     int len = JvGetStringUTFLength(val);
55     Py_UNICODE pchars[len];
56     jchar *jchars = JvGetStringChars(val);
57     
58     for (int i = 0; i < len; i++) {      
59       pchars[i] = jchars[i];
60     }
61     return PyUnicode_FromUnicode((const Py_UNICODE *) pchars, len);
62   }
63 }
64 }
65
66 %typemaps_asvalfrom(%checkcode(STRING),
67                     %arg(SWIG_AsVal(jstring)), 
68                     %arg(SWIG_From(jstring)), 
69                     %arg(SWIG_AsVal_frag(jstring)), 
70                     %arg(SWIG_From_frag(jstring)), 
71                     java::lang::String *);
72