/tags/rel-1-3-7/SWIG/Lib/python/python.swg

# · Unknown · 381 lines · 342 code · 39 blank · 0 comment · 0 complexity · 412509c77e1f3761c6c844549d5a64f6 MD5 · raw file

  1. /***********************************************************************
  2. * python.swg
  3. *
  4. * This file contains the runtime support for Python modules
  5. * and includes code for managing global variables and pointer
  6. * type checking.
  7. *
  8. * Author : David Beazley (beazley@cs.uchicago.edu)
  9. ************************************************************************/
  10. #include <stdlib.h>
  11. #include "Python.h"
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #define SWIG_PY_INT 1
  16. #define SWIG_PY_FLOAT 2
  17. #define SWIG_PY_STRING 3
  18. #define SWIG_PY_POINTER 4
  19. /* Constant information structure */
  20. typedef struct swig_const_info {
  21. int type;
  22. char *name;
  23. long lvalue;
  24. double dvalue;
  25. void *pvalue;
  26. swig_type_info **ptype;
  27. } swig_const_info;
  28. #ifdef SWIG_NOINCLUDE
  29. SWIGEXPORT(PyObject *) SWIG_newvarlink();
  30. SWIGEXPORT(void) SWIG_addvarlink(PyObject *, char *, PyObject *(*)(void), int (*)(PyObject *));
  31. SWIGEXPORT(int) SWIG_ConvertPtr(PyObject *, void **, swig_type_info *, int);
  32. SWIGEXPORT(int) SWIG_ConvertPacked(PyObject *, void *, int sz, swig_type_info *, int);
  33. SWIGEXPORT(char *) SWIG_PackData(char *c, void *, int);
  34. SWIGEXPORT(char *) SWIG_UnpackData(char *c, void *, int);
  35. SWIGEXPORT(PyObject *) SWIG_NewPointerObj(void *, swig_type_info *);
  36. SWIGEXPORT(PyObject *) SWIG_NewPackedObj(void *, int sz, swig_type_info *);
  37. SWIGEXPORT(void) SWIG_InstallConstants(PyObject *d, swig_const_info constants[]);
  38. #else
  39. /* -----------------------------------------------------------------------------
  40. * global variable support code.
  41. * ----------------------------------------------------------------------------- */
  42. typedef struct swig_globalvar {
  43. char *name; /* Name of global variable */
  44. PyObject *(*get_attr)(void); /* Return the current value */
  45. int (*set_attr)(PyObject *); /* Set the value */
  46. struct swig_globalvar *next;
  47. } swig_globalvar;
  48. typedef struct swig_varlinkobject {
  49. PyObject_HEAD
  50. swig_globalvar *vars;
  51. } swig_varlinkobject;
  52. static PyObject *
  53. swig_varlink_repr(swig_varlinkobject *v) {
  54. v = v;
  55. return PyString_FromString("<Global variables>");
  56. }
  57. static int
  58. swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) {
  59. swig_globalvar *var;
  60. flags = flags;
  61. fprintf(fp,"Global variables { ");
  62. for (var = v->vars; var; var=var->next) {
  63. fprintf(fp,"%s", var->name);
  64. if (var->next) fprintf(fp,", ");
  65. }
  66. fprintf(fp," }\n");
  67. return 0;
  68. }
  69. static PyObject *
  70. swig_varlink_getattr(swig_varlinkobject *v, char *n) {
  71. swig_globalvar *var = v->vars;
  72. while (var) {
  73. if (strcmp(var->name,n) == 0) {
  74. return (*var->get_attr)();
  75. }
  76. var = var->next;
  77. }
  78. PyErr_SetString(PyExc_NameError,"Unknown C global variable");
  79. return NULL;
  80. }
  81. static int
  82. swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
  83. swig_globalvar *var = v->vars;
  84. while (var) {
  85. if (strcmp(var->name,n) == 0) {
  86. return (*var->set_attr)(p);
  87. }
  88. var = var->next;
  89. }
  90. PyErr_SetString(PyExc_NameError,"Unknown C global variable");
  91. return 1;
  92. }
  93. statichere PyTypeObject varlinktype = {
  94. PyObject_HEAD_INIT(0)
  95. 0,
  96. (char *)"swigvarlink", /* Type name */
  97. sizeof(swig_varlinkobject), /* Basic size */
  98. 0, /* Itemsize */
  99. 0, /* Deallocator */
  100. (printfunc) swig_varlink_print, /* Print */
  101. (getattrfunc) swig_varlink_getattr, /* get attr */
  102. (setattrfunc) swig_varlink_setattr, /* Set attr */
  103. 0, /* tp_compare */
  104. (reprfunc) swig_varlink_repr, /* tp_repr */
  105. 0, /* tp_as_number */
  106. 0, /* tp_as_mapping*/
  107. 0, /* tp_hash */
  108. };
  109. /* Create a variable linking object for use later */
  110. SWIGRUNTIME(PyObject *)
  111. SWIG_newvarlink(void) {
  112. swig_varlinkobject *result = 0;
  113. result = PyMem_NEW(swig_varlinkobject,1);
  114. varlinktype.ob_type = &PyType_Type; /* Patch varlinktype into a PyType */
  115. result->ob_type = &varlinktype;
  116. result->vars = 0;
  117. result->ob_refcnt = 0;
  118. Py_XINCREF((PyObject *) result);
  119. return ((PyObject*) result);
  120. }
  121. SWIGRUNTIME(void)
  122. SWIG_addvarlink(PyObject *p, char *name,
  123. PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
  124. swig_varlinkobject *v;
  125. swig_globalvar *gv;
  126. v= (swig_varlinkobject *) p;
  127. gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
  128. gv->name = (char *) malloc(strlen(name)+1);
  129. strcpy(gv->name,name);
  130. gv->get_attr = get_attr;
  131. gv->set_attr = set_attr;
  132. gv->next = v->vars;
  133. v->vars = gv;
  134. }
  135. /* Pack binary data into a string */
  136. SWIGRUNTIME(char *)
  137. SWIG_PackData(char *c, void *ptr, int sz) {
  138. static char hex[17] = "0123456789abcdef";
  139. int i;
  140. unsigned char *u = (unsigned char *) ptr;
  141. register unsigned char uu;
  142. for (i = 0; i < sz; i++,u++) {
  143. uu = *u;
  144. *(c++) = hex[(uu & 0xf0) >> 4];
  145. *(c++) = hex[uu & 0xf];
  146. }
  147. return c;
  148. }
  149. /* Unpack binary data from a string */
  150. SWIGRUNTIME(char *)
  151. SWIG_UnpackData(char *c, void *ptr, int sz) {
  152. register unsigned char uu;
  153. register int d;
  154. unsigned char *u = (unsigned char *) ptr;
  155. int i;
  156. for (i = 0; i < sz; i++, u++) {
  157. d = *(c++);
  158. if ((d >= '0') && (d <= '9'))
  159. uu = ((d - '0') << 4);
  160. else if ((d >= 'a') && (d <= 'f'))
  161. uu = ((d - ('a'-10)) << 4);
  162. d = *(c++);
  163. if ((d >= '0') && (d <= '9'))
  164. uu |= (d - '0');
  165. else if ((d >= 'a') && (d <= 'f'))
  166. uu |= (d - ('a'-10));
  167. *u = uu;
  168. }
  169. return c;
  170. }
  171. /* Convert a pointer value */
  172. SWIGRUNTIME(int)
  173. SWIG_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) {
  174. swig_type_info *tc;
  175. char *c;
  176. static PyObject *SWIG_this = 0;
  177. int newref = 0;
  178. if (!obj) return 0;
  179. if (obj == Py_None) {
  180. *ptr = 0;
  181. return 0;
  182. }
  183. #ifdef SWIG_COBJECT_TYPES
  184. if (!(PyCObject_Check(obj))) {
  185. if (!SWIG_this)
  186. SWIG_this = PyString_InternFromString("this");
  187. obj = PyObject_GetAttr(obj,SWIG_this);
  188. newref = 1;
  189. if (!obj) goto type_error;
  190. if (!PyCObject_Check(obj)) {
  191. Py_DECREF(obj);
  192. goto type_error;
  193. }
  194. }
  195. *ptr = PyCObject_AsVoidPtr(obj);
  196. c = (char *) PyCObject_GetDesc(obj);
  197. if (newref) Py_DECREF(obj);
  198. goto cobject;
  199. #else
  200. if (!(PyString_Check(obj))) {
  201. if (!SWIG_this)
  202. SWIG_this = PyString_InternFromString("this");
  203. obj = PyObject_GetAttr(obj,SWIG_this);
  204. newref = 1;
  205. if (!obj) goto type_error;
  206. if (!PyString_Check(obj)) {
  207. Py_DECREF(obj);
  208. goto type_error;
  209. }
  210. }
  211. c = PyString_AsString(obj);
  212. /* Pointer values must start with leading underscore */
  213. if (*c != '_') {
  214. *ptr = (void *) 0;
  215. if (strcmp(c,"NULL") == 0) {
  216. if (newref) Py_DECREF(obj);
  217. return 0;
  218. } else {
  219. if (newref) Py_DECREF(obj);
  220. goto type_error;
  221. }
  222. }
  223. c++;
  224. c = SWIG_UnpackData(c,ptr,sizeof(void *));
  225. if (newref) Py_DECREF(obj);
  226. #endif
  227. #ifdef SWIG_COBJECT_TYPES
  228. cobject:
  229. #endif
  230. if (ty) {
  231. tc = SWIG_TypeCheck(c,ty);
  232. if (!tc) goto type_error;
  233. *ptr = SWIG_TypeCast(tc,(void*) *ptr);
  234. }
  235. return 0;
  236. type_error:
  237. if (flags) {
  238. if (ty) {
  239. char *temp = (char *) malloc(64+strlen(ty->name));
  240. sprintf(temp,"Type error. Expected %s", ty->name);
  241. PyErr_SetString(PyExc_TypeError, temp);
  242. free((char *) temp);
  243. } else {
  244. PyErr_SetString(PyExc_TypeError,"Expected a pointer");
  245. }
  246. }
  247. return -1;
  248. }
  249. /* Convert a packed value value */
  250. SWIGRUNTIME(int)
  251. SWIG_ConvertPacked(PyObject *obj, void *ptr, int sz, swig_type_info *ty, int flags) {
  252. swig_type_info *tc;
  253. char *c;
  254. if ((!obj) || (!PyString_Check(obj))) goto type_error;
  255. c = PyString_AsString(obj);
  256. /* Pointer values must start with leading underscore */
  257. if (*c != '_') goto type_error;
  258. c++;
  259. c = SWIG_UnpackData(c,ptr,sz);
  260. if (ty) {
  261. tc = SWIG_TypeCheck(c,ty);
  262. if (!tc) goto type_error;
  263. }
  264. return 0;
  265. type_error:
  266. if (flags) {
  267. if (ty) {
  268. char *temp = (char *) malloc(64+strlen(ty->name));
  269. sprintf(temp,"Type error. Expected %s", ty->name);
  270. PyErr_SetString(PyExc_TypeError, temp);
  271. free((char *) temp);
  272. } else {
  273. PyErr_SetString(PyExc_TypeError,"Expected a pointer");
  274. }
  275. }
  276. return -1;
  277. }
  278. /* Create a new pointer object */
  279. SWIGRUNTIME(PyObject *)
  280. SWIG_NewPointerObj(void *ptr, swig_type_info *type) {
  281. PyObject *robj;
  282. if (!ptr) {
  283. Py_INCREF(Py_None);
  284. return Py_None;
  285. }
  286. #ifdef SWIG_COBJECT_TYPES
  287. robj = PyCObject_FromVoidPtrAndDesc((void *) ptr, (char *) type->name, NULL);
  288. #else
  289. {
  290. char result[512];
  291. char *r = result;
  292. *(r++) = '_';
  293. r = SWIG_PackData(r,&ptr,sizeof(void *));
  294. strcpy(r,type->name);
  295. robj = PyString_FromString(result);
  296. }
  297. #endif
  298. return robj;
  299. }
  300. SWIGRUNTIME(PyObject *)
  301. SWIG_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
  302. char result[1024];
  303. char *r = result;
  304. if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
  305. *(r++) = '_';
  306. r = SWIG_PackData(r,ptr,sz);
  307. strcpy(r,type->name);
  308. return PyString_FromString(result);
  309. }
  310. /* Install Constants */
  311. SWIGRUNTIME(void)
  312. SWIG_InstallConstants(PyObject *d, swig_const_info constants[]) {
  313. int i;
  314. PyObject *obj;
  315. for (i = 0; constants[i].type; i++) {
  316. switch(constants[i].type) {
  317. case SWIG_PY_INT:
  318. obj = PyInt_FromLong(constants[i].lvalue);
  319. break;
  320. case SWIG_PY_FLOAT:
  321. obj = PyFloat_FromDouble(constants[i].dvalue);
  322. break;
  323. case SWIG_PY_STRING:
  324. obj = PyString_FromString((char *) constants[i].pvalue);
  325. break;
  326. case SWIG_PY_POINTER:
  327. obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype);
  328. break;
  329. default:
  330. obj = 0;
  331. break;
  332. }
  333. if (obj) {
  334. PyDict_SetItemString(d,constants[i].name,obj);
  335. Py_DECREF(obj);
  336. }
  337. }
  338. }
  339. #endif
  340. #ifdef __cplusplus
  341. }
  342. #endif