/tags/rel-1.3.36/trunk/Lib/python/pyinit.swg

# · Unknown · 288 lines · 259 code · 29 blank · 0 comment · 0 complexity · 10aed329100fc9e3bed2eb01fa261ec2 MD5 · raw file

  1. /* ------------------------------------------------------------
  2. * The start of the Python initialization function
  3. * ------------------------------------------------------------ */
  4. %insert(init) "swiginit.swg"
  5. %init %{
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /* Python-specific SWIG API */
  10. #define SWIG_newvarlink() SWIG_Python_newvarlink()
  11. #define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr)
  12. #define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants)
  13. /* -----------------------------------------------------------------------------
  14. * global variable support code.
  15. * ----------------------------------------------------------------------------- */
  16. typedef struct swig_globalvar {
  17. char *name; /* Name of global variable */
  18. PyObject *(*get_attr)(void); /* Return the current value */
  19. int (*set_attr)(PyObject *); /* Set the value */
  20. struct swig_globalvar *next;
  21. } swig_globalvar;
  22. typedef struct swig_varlinkobject {
  23. PyObject_HEAD
  24. swig_globalvar *vars;
  25. } swig_varlinkobject;
  26. SWIGINTERN PyObject *
  27. swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
  28. return PyString_FromString("<Swig global variables>");
  29. }
  30. SWIGINTERN PyObject *
  31. swig_varlink_str(swig_varlinkobject *v) {
  32. PyObject *str = PyString_FromString("(");
  33. swig_globalvar *var;
  34. for (var = v->vars; var; var=var->next) {
  35. PyString_ConcatAndDel(&str,PyString_FromString(var->name));
  36. if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
  37. }
  38. PyString_ConcatAndDel(&str,PyString_FromString(")"));
  39. return str;
  40. }
  41. SWIGINTERN int
  42. swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
  43. PyObject *str = swig_varlink_str(v);
  44. fprintf(fp,"Swig global variables ");
  45. fprintf(fp,"%s\n", PyString_AsString(str));
  46. Py_DECREF(str);
  47. return 0;
  48. }
  49. SWIGINTERN void
  50. swig_varlink_dealloc(swig_varlinkobject *v) {
  51. swig_globalvar *var = v->vars;
  52. while (var) {
  53. swig_globalvar *n = var->next;
  54. free(var->name);
  55. free(var);
  56. var = n;
  57. }
  58. }
  59. SWIGINTERN PyObject *
  60. swig_varlink_getattr(swig_varlinkobject *v, char *n) {
  61. PyObject *res = NULL;
  62. swig_globalvar *var = v->vars;
  63. while (var) {
  64. if (strcmp(var->name,n) == 0) {
  65. res = (*var->get_attr)();
  66. break;
  67. }
  68. var = var->next;
  69. }
  70. if (res == NULL && !PyErr_Occurred()) {
  71. PyErr_SetString(PyExc_NameError,"Unknown C global variable");
  72. }
  73. return res;
  74. }
  75. SWIGINTERN int
  76. swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
  77. int res = 1;
  78. swig_globalvar *var = v->vars;
  79. while (var) {
  80. if (strcmp(var->name,n) == 0) {
  81. res = (*var->set_attr)(p);
  82. break;
  83. }
  84. var = var->next;
  85. }
  86. if (res == 1 && !PyErr_Occurred()) {
  87. PyErr_SetString(PyExc_NameError,"Unknown C global variable");
  88. }
  89. return res;
  90. }
  91. SWIGINTERN PyTypeObject*
  92. swig_varlink_type(void) {
  93. static char varlink__doc__[] = "Swig var link object";
  94. static PyTypeObject varlink_type;
  95. static int type_init = 0;
  96. if (!type_init) {
  97. const PyTypeObject tmp
  98. = {
  99. PyObject_HEAD_INIT(NULL)
  100. 0, /* Number of items in variable part (ob_size) */
  101. (char *)"swigvarlink", /* Type name (tp_name) */
  102. sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */
  103. 0, /* Itemsize (tp_itemsize) */
  104. (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */
  105. (printfunc) swig_varlink_print, /* Print (tp_print) */
  106. (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */
  107. (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */
  108. 0, /* tp_compare */
  109. (reprfunc) swig_varlink_repr, /* tp_repr */
  110. 0, /* tp_as_number */
  111. 0, /* tp_as_sequence */
  112. 0, /* tp_as_mapping */
  113. 0, /* tp_hash */
  114. 0, /* tp_call */
  115. (reprfunc)swig_varlink_str, /* tp_str */
  116. 0, /* tp_getattro */
  117. 0, /* tp_setattro */
  118. 0, /* tp_as_buffer */
  119. 0, /* tp_flags */
  120. varlink__doc__, /* tp_doc */
  121. 0, /* tp_traverse */
  122. 0, /* tp_clear */
  123. 0, /* tp_richcompare */
  124. 0, /* tp_weaklistoffset */
  125. #if PY_VERSION_HEX >= 0x02020000
  126. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */
  127. #endif
  128. #if PY_VERSION_HEX >= 0x02030000
  129. 0, /* tp_del */
  130. #endif
  131. #ifdef COUNT_ALLOCS
  132. 0,0,0,0 /* tp_alloc -> tp_next */
  133. #endif
  134. };
  135. varlink_type = tmp;
  136. varlink_type.ob_type = &PyType_Type;
  137. type_init = 1;
  138. }
  139. return &varlink_type;
  140. }
  141. /* Create a variable linking object for use later */
  142. SWIGINTERN PyObject *
  143. SWIG_Python_newvarlink(void) {
  144. swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type());
  145. if (result) {
  146. result->vars = 0;
  147. }
  148. return ((PyObject*) result);
  149. }
  150. SWIGINTERN void
  151. SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
  152. swig_varlinkobject *v = (swig_varlinkobject *) p;
  153. swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
  154. if (gv) {
  155. size_t size = strlen(name)+1;
  156. gv->name = (char *)malloc(size);
  157. if (gv->name) {
  158. strncpy(gv->name,name,size);
  159. gv->get_attr = get_attr;
  160. gv->set_attr = set_attr;
  161. gv->next = v->vars;
  162. }
  163. }
  164. v->vars = gv;
  165. }
  166. SWIGINTERN PyObject *
  167. SWIG_globals(void) {
  168. static PyObject *_SWIG_globals = 0;
  169. if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink();
  170. return _SWIG_globals;
  171. }
  172. /* -----------------------------------------------------------------------------
  173. * constants/methods manipulation
  174. * ----------------------------------------------------------------------------- */
  175. /* Install Constants */
  176. SWIGINTERN void
  177. SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
  178. PyObject *obj = 0;
  179. size_t i;
  180. for (i = 0; constants[i].type; ++i) {
  181. switch(constants[i].type) {
  182. case SWIG_PY_POINTER:
  183. obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
  184. break;
  185. case SWIG_PY_BINARY:
  186. obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
  187. break;
  188. default:
  189. obj = 0;
  190. break;
  191. }
  192. if (obj) {
  193. PyDict_SetItemString(d, constants[i].name, obj);
  194. Py_DECREF(obj);
  195. }
  196. }
  197. }
  198. /* -----------------------------------------------------------------------------*/
  199. /* Fix SwigMethods to carry the callback ptrs when needed */
  200. /* -----------------------------------------------------------------------------*/
  201. SWIGINTERN void
  202. SWIG_Python_FixMethods(PyMethodDef *methods,
  203. swig_const_info *const_table,
  204. swig_type_info **types,
  205. swig_type_info **types_initial) {
  206. size_t i;
  207. for (i = 0; methods[i].ml_name; ++i) {
  208. const char *c = methods[i].ml_doc;
  209. if (c && (c = strstr(c, "swig_ptr: "))) {
  210. int j;
  211. swig_const_info *ci = 0;
  212. const char *name = c + 10;
  213. for (j = 0; const_table[j].type; ++j) {
  214. if (strncmp(const_table[j].name, name,
  215. strlen(const_table[j].name)) == 0) {
  216. ci = &(const_table[j]);
  217. break;
  218. }
  219. }
  220. if (ci) {
  221. size_t shift = (ci->ptype) - types;
  222. swig_type_info *ty = types_initial[shift];
  223. size_t ldoc = (c - methods[i].ml_doc);
  224. size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
  225. char *ndoc = (char*)malloc(ldoc + lptr + 10);
  226. if (ndoc) {
  227. char *buff = ndoc;
  228. void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0;
  229. if (ptr) {
  230. strncpy(buff, methods[i].ml_doc, ldoc);
  231. buff += ldoc;
  232. strncpy(buff, "swig_ptr: ", 10);
  233. buff += 10;
  234. SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
  235. methods[i].ml_doc = ndoc;
  236. }
  237. }
  238. }
  239. }
  240. }
  241. }
  242. #ifdef __cplusplus
  243. }
  244. #endif
  245. /* -----------------------------------------------------------------------------*
  246. * Partial Init method
  247. * -----------------------------------------------------------------------------*/
  248. #ifdef __cplusplus
  249. extern "C"
  250. #endif
  251. SWIGEXPORT void SWIG_init(void) {
  252. PyObject *m, *d;
  253. /* Fix SwigMethods to carry the callback ptrs when needed */
  254. SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
  255. m = Py_InitModule((char *) SWIG_name, SwigMethods);
  256. d = PyModule_GetDict(m);
  257. SWIG_InitializeModule(0);
  258. SWIG_InstallConstants(d,swig_const_table);
  259. %}