Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / share / swig / 1.3.26 / python / pystrings.swg
CommitLineData
920dae64
AT
1
2/* ------------------------------------------------------------
3 * utility methods for char strings
4 * ------------------------------------------------------------ */
5
6%types(char *);
7%fragment("SWIG_AsCharPtrAndSize","header") {
8/* returns SWIG_OLDOBJ if the input is a raw char*, SWIG_PYSTR if is a PyString */
9SWIGINTERN int
10SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize)
11{
12 static swig_type_info* pchar_info = 0;
13 char* vptr = 0;
14 if (!pchar_info) pchar_info = SWIG_TypeQuery("char *");
15 if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_info, 0) != -1) {
16 if (cptr) *cptr = vptr;
17 if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0;
18 return SWIG_OLDOBJ;
19 } else {
20 PyErr_Clear();
21 if (PyString_Check(obj)) {
22 if (cptr) {
23 *cptr = PyString_AS_STRING(obj);
24 if (psize) {
25 *psize = PyString_GET_SIZE(obj) + 1;
26 }
27 }
28 return SWIG_PYSTR;
29 }
30 }
31 if (cptr) {
32 SWIG_type_error("char *", obj);
33 }
34 return 0;
35}
36}
37
38%fragment("SWIG_AsCharPtr","header",
39 fragment="SWIG_AsCharPtrAndSize") {
40SWIGINTERNINLINE int
41SWIG_AsCharPtr(PyObject *obj, char **val)
42{
43 if (SWIG_AsCharPtrAndSize(obj, val, (size_t*)(0))) {
44 return 1;
45 }
46 if (val) {
47 PyErr_Clear();
48 SWIG_type_error("char *", obj);
49 }
50 return 0;
51}
52}
53
54%fragment("SWIG_FromCharPtr","header") {
55SWIGINTERN PyObject *
56SWIG_FromCharPtr(const char* cptr)
57{
58 if (cptr) {
59 size_t size = strlen(cptr);
60 if (size > INT_MAX) {
61 return SWIG_NewPointerObj(SWIG_const_cast(cptr,char*),
62 SWIG_TypeQuery("char *"), 0);
63 } else {
64 if (size != 0) {
65 return PyString_FromStringAndSize(cptr, size);
66 } else {
67 return PyString_FromString(cptr);
68 }
69 }
70 }
71 Py_INCREF(Py_None);
72 return Py_None;
73}
74}
75
76%fragment("SWIG_AsNewCharPtr","header",
77 fragment="SWIG_AsCharPtrAndSize") {
78SWIGINTERN int
79SWIG_AsNewCharPtr(PyObject *obj, char **val)
80{
81 char* cptr = 0; size_t csize = 0;
82 int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize);
83 if (res) {
84 if (val) {
85 if (csize) {
86 *val = SWIG_new_array(csize, char);
87 memcpy(*val, cptr, --csize);
88 (*val)[csize] = 0;
89 } else if (cptr) {
90 *val = SWIG_new_array(1, char);
91 (*val)[0] = 0;
92 } else {
93 *val = 0;
94 }
95 }
96 return SWIG_NEWOBJ;
97 }
98 if (val) {
99 SWIG_type_error("char *", obj);
100 }
101 return 0;
102}
103}
104
105%fragment("SWIG_AsCharArray","header",
106 fragment="SWIG_AsCharPtrAndSize") {
107SWIGINTERN int
108SWIG_AsCharArray(PyObject *obj, char *val, size_t size)
109{
110 char* cptr; size_t csize;
111 if (SWIG_AsCharPtrAndSize(obj, &cptr, &csize)) {
112 /* in C you can do:
113
114 char x[5] = "hello";
115
116 ie, assing the array using an extra '0' char.
117 */
118 if ((csize == size + 1) && !(cptr[csize-1])) --csize;
119 if (csize <= size) {
120 if (val) {
121 if (csize) memcpy(val, cptr, csize);
122 if (csize < size) memset(val + csize, 0, size - csize);
123 }
124 return 1;
125 }
126 }
127 if (val) {
128 PyErr_Format(PyExc_TypeError,
129 "a char array of maximum size %lu is expected",
130 (unsigned long) size);
131 }
132 return 0;
133}
134}
135
136%fragment("SWIG_FromCharArray","header") {
137SWIGINTERNINLINE PyObject *
138SWIG_FromCharArray(const char* carray, size_t size)
139{
140 if (size > INT_MAX) {
141 return SWIG_NewPointerObj(SWIG_const_cast(carray,char *),
142 SWIG_TypeQuery("char *"), 0);
143 } else {
144 return PyString_FromStringAndSize(carray, SWIG_numeric_cast(size,int));
145 }
146}
147}
148
149/* ------------------------------------------------------------
150 * The plain char * handling
151 * ------------------------------------------------------------ */
152
153%typemap_pystring(char,
154 SWIG_AsCharPtr,
155 SWIG_AsCharPtrAndSize,
156 SWIG_FromCharPtr,
157 SWIG_AsNewCharPtr,
158 SWIG_AsCharArray,
159 SWIG_FromCharArray)