Mercurial > mm7
comparison lib/swig/swigwin-2.0.11/Lib/swigrun.swg @ 1899:b3009adc0e2f
Adding swig, gitignore, hgignore
author | Nomad |
---|---|
date | Mon, 21 Oct 2013 10:42:27 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1867:eb580660bbbb | 1899:b3009adc0e2f |
---|---|
1 /* ----------------------------------------------------------------------------- | |
2 * swigrun.swg | |
3 * | |
4 * This file contains generic C API SWIG runtime support for pointer | |
5 * type checking. | |
6 * ----------------------------------------------------------------------------- */ | |
7 | |
8 /* This should only be incremented when either the layout of swig_type_info changes, | |
9 or for whatever reason, the runtime changes incompatibly */ | |
10 #define SWIG_RUNTIME_VERSION "4" | |
11 | |
12 /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ | |
13 #ifdef SWIG_TYPE_TABLE | |
14 # define SWIG_QUOTE_STRING(x) #x | |
15 # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) | |
16 # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) | |
17 #else | |
18 # define SWIG_TYPE_TABLE_NAME | |
19 #endif | |
20 | |
21 /* | |
22 You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for | |
23 creating a static or dynamic library from the SWIG runtime code. | |
24 In 99.9% of the cases, SWIG just needs to declare them as 'static'. | |
25 | |
26 But only do this if strictly necessary, ie, if you have problems | |
27 with your compiler or suchlike. | |
28 */ | |
29 | |
30 #ifndef SWIGRUNTIME | |
31 # define SWIGRUNTIME SWIGINTERN | |
32 #endif | |
33 | |
34 #ifndef SWIGRUNTIMEINLINE | |
35 # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE | |
36 #endif | |
37 | |
38 /* Generic buffer size */ | |
39 #ifndef SWIG_BUFFER_SIZE | |
40 # define SWIG_BUFFER_SIZE 1024 | |
41 #endif | |
42 | |
43 /* Flags for pointer conversions */ | |
44 #define SWIG_POINTER_DISOWN 0x1 | |
45 #define SWIG_CAST_NEW_MEMORY 0x2 | |
46 | |
47 /* Flags for new pointer objects */ | |
48 #define SWIG_POINTER_OWN 0x1 | |
49 | |
50 | |
51 /* | |
52 Flags/methods for returning states. | |
53 | |
54 The SWIG conversion methods, as ConvertPtr, return an integer | |
55 that tells if the conversion was successful or not. And if not, | |
56 an error code can be returned (see swigerrors.swg for the codes). | |
57 | |
58 Use the following macros/flags to set or process the returning | |
59 states. | |
60 | |
61 In old versions of SWIG, code such as the following was usually written: | |
62 | |
63 if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { | |
64 // success code | |
65 } else { | |
66 //fail code | |
67 } | |
68 | |
69 Now you can be more explicit: | |
70 | |
71 int res = SWIG_ConvertPtr(obj,vptr,ty.flags); | |
72 if (SWIG_IsOK(res)) { | |
73 // success code | |
74 } else { | |
75 // fail code | |
76 } | |
77 | |
78 which is the same really, but now you can also do | |
79 | |
80 Type *ptr; | |
81 int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); | |
82 if (SWIG_IsOK(res)) { | |
83 // success code | |
84 if (SWIG_IsNewObj(res) { | |
85 ... | |
86 delete *ptr; | |
87 } else { | |
88 ... | |
89 } | |
90 } else { | |
91 // fail code | |
92 } | |
93 | |
94 I.e., now SWIG_ConvertPtr can return new objects and you can | |
95 identify the case and take care of the deallocation. Of course that | |
96 also requires SWIG_ConvertPtr to return new result values, such as | |
97 | |
98 int SWIG_ConvertPtr(obj, ptr,...) { | |
99 if (<obj is ok>) { | |
100 if (<need new object>) { | |
101 *ptr = <ptr to new allocated object>; | |
102 return SWIG_NEWOBJ; | |
103 } else { | |
104 *ptr = <ptr to old object>; | |
105 return SWIG_OLDOBJ; | |
106 } | |
107 } else { | |
108 return SWIG_BADOBJ; | |
109 } | |
110 } | |
111 | |
112 Of course, returning the plain '0(success)/-1(fail)' still works, but you can be | |
113 more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the | |
114 SWIG errors code. | |
115 | |
116 Finally, if the SWIG_CASTRANK_MODE is enabled, the result code | |
117 allows to return the 'cast rank', for example, if you have this | |
118 | |
119 int food(double) | |
120 int fooi(int); | |
121 | |
122 and you call | |
123 | |
124 food(1) // cast rank '1' (1 -> 1.0) | |
125 fooi(1) // cast rank '0' | |
126 | |
127 just use the SWIG_AddCast()/SWIG_CheckState() | |
128 */ | |
129 | |
130 #define SWIG_OK (0) | |
131 #define SWIG_ERROR (-1) | |
132 #define SWIG_IsOK(r) (r >= 0) | |
133 #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) | |
134 | |
135 /* The CastRankLimit says how many bits are used for the cast rank */ | |
136 #define SWIG_CASTRANKLIMIT (1 << 8) | |
137 /* The NewMask denotes the object was created (using new/malloc) */ | |
138 #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) | |
139 /* The TmpMask is for in/out typemaps that use temporal objects */ | |
140 #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) | |
141 /* Simple returning values */ | |
142 #define SWIG_BADOBJ (SWIG_ERROR) | |
143 #define SWIG_OLDOBJ (SWIG_OK) | |
144 #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) | |
145 #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) | |
146 /* Check, add and del mask methods */ | |
147 #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) | |
148 #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) | |
149 #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) | |
150 #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) | |
151 #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) | |
152 #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) | |
153 | |
154 /* Cast-Rank Mode */ | |
155 #if defined(SWIG_CASTRANK_MODE) | |
156 # ifndef SWIG_TypeRank | |
157 # define SWIG_TypeRank unsigned long | |
158 # endif | |
159 # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ | |
160 # define SWIG_MAXCASTRANK (2) | |
161 # endif | |
162 # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) | |
163 # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) | |
164 SWIGINTERNINLINE int SWIG_AddCast(int r) { | |
165 return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; | |
166 } | |
167 SWIGINTERNINLINE int SWIG_CheckState(int r) { | |
168 return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; | |
169 } | |
170 #else /* no cast-rank mode */ | |
171 # define SWIG_AddCast(r) (r) | |
172 # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) | |
173 #endif | |
174 | |
175 | |
176 #include <string.h> | |
177 | |
178 #ifdef __cplusplus | |
179 extern "C" { | |
180 #endif | |
181 | |
182 typedef void *(*swig_converter_func)(void *, int *); | |
183 typedef struct swig_type_info *(*swig_dycast_func)(void **); | |
184 | |
185 /* Structure to store information on one type */ | |
186 typedef struct swig_type_info { | |
187 const char *name; /* mangled name of this type */ | |
188 const char *str; /* human readable name of this type */ | |
189 swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ | |
190 struct swig_cast_info *cast; /* linked list of types that can cast into this type */ | |
191 void *clientdata; /* language specific type data */ | |
192 int owndata; /* flag if the structure owns the clientdata */ | |
193 } swig_type_info; | |
194 | |
195 /* Structure to store a type and conversion function used for casting */ | |
196 typedef struct swig_cast_info { | |
197 swig_type_info *type; /* pointer to type that is equivalent to this type */ | |
198 swig_converter_func converter; /* function to cast the void pointers */ | |
199 struct swig_cast_info *next; /* pointer to next cast in linked list */ | |
200 struct swig_cast_info *prev; /* pointer to the previous cast */ | |
201 } swig_cast_info; | |
202 | |
203 /* Structure used to store module information | |
204 * Each module generates one structure like this, and the runtime collects | |
205 * all of these structures and stores them in a circularly linked list.*/ | |
206 typedef struct swig_module_info { | |
207 swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ | |
208 size_t size; /* Number of types in this module */ | |
209 struct swig_module_info *next; /* Pointer to next element in circularly linked list */ | |
210 swig_type_info **type_initial; /* Array of initially generated type structures */ | |
211 swig_cast_info **cast_initial; /* Array of initially generated casting structures */ | |
212 void *clientdata; /* Language specific module data */ | |
213 } swig_module_info; | |
214 | |
215 /* | |
216 Compare two type names skipping the space characters, therefore | |
217 "char*" == "char *" and "Class<int>" == "Class<int >", etc. | |
218 | |
219 Return 0 when the two name types are equivalent, as in | |
220 strncmp, but skipping ' '. | |
221 */ | |
222 SWIGRUNTIME int | |
223 SWIG_TypeNameComp(const char *f1, const char *l1, | |
224 const char *f2, const char *l2) { | |
225 for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { | |
226 while ((*f1 == ' ') && (f1 != l1)) ++f1; | |
227 while ((*f2 == ' ') && (f2 != l2)) ++f2; | |
228 if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; | |
229 } | |
230 return (int)((l1 - f1) - (l2 - f2)); | |
231 } | |
232 | |
233 /* | |
234 Check type equivalence in a name list like <name1>|<name2>|... | |
235 Return 0 if equal, -1 if nb < tb, 1 if nb > tb | |
236 */ | |
237 SWIGRUNTIME int | |
238 SWIG_TypeCmp(const char *nb, const char *tb) { | |
239 int equiv = 1; | |
240 const char* te = tb + strlen(tb); | |
241 const char* ne = nb; | |
242 while (equiv != 0 && *ne) { | |
243 for (nb = ne; *ne; ++ne) { | |
244 if (*ne == '|') break; | |
245 } | |
246 equiv = SWIG_TypeNameComp(nb, ne, tb, te); | |
247 if (*ne) ++ne; | |
248 } | |
249 return equiv; | |
250 } | |
251 | |
252 /* | |
253 Check type equivalence in a name list like <name1>|<name2>|... | |
254 Return 0 if not equal, 1 if equal | |
255 */ | |
256 SWIGRUNTIME int | |
257 SWIG_TypeEquiv(const char *nb, const char *tb) { | |
258 return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; | |
259 } | |
260 | |
261 /* | |
262 Check the typename | |
263 */ | |
264 SWIGRUNTIME swig_cast_info * | |
265 SWIG_TypeCheck(const char *c, swig_type_info *ty) { | |
266 if (ty) { | |
267 swig_cast_info *iter = ty->cast; | |
268 while (iter) { | |
269 if (strcmp(iter->type->name, c) == 0) { | |
270 if (iter == ty->cast) | |
271 return iter; | |
272 /* Move iter to the top of the linked list */ | |
273 iter->prev->next = iter->next; | |
274 if (iter->next) | |
275 iter->next->prev = iter->prev; | |
276 iter->next = ty->cast; | |
277 iter->prev = 0; | |
278 if (ty->cast) ty->cast->prev = iter; | |
279 ty->cast = iter; | |
280 return iter; | |
281 } | |
282 iter = iter->next; | |
283 } | |
284 } | |
285 return 0; | |
286 } | |
287 | |
288 /* | |
289 Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison | |
290 */ | |
291 SWIGRUNTIME swig_cast_info * | |
292 SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { | |
293 if (ty) { | |
294 swig_cast_info *iter = ty->cast; | |
295 while (iter) { | |
296 if (iter->type == from) { | |
297 if (iter == ty->cast) | |
298 return iter; | |
299 /* Move iter to the top of the linked list */ | |
300 iter->prev->next = iter->next; | |
301 if (iter->next) | |
302 iter->next->prev = iter->prev; | |
303 iter->next = ty->cast; | |
304 iter->prev = 0; | |
305 if (ty->cast) ty->cast->prev = iter; | |
306 ty->cast = iter; | |
307 return iter; | |
308 } | |
309 iter = iter->next; | |
310 } | |
311 } | |
312 return 0; | |
313 } | |
314 | |
315 /* | |
316 Cast a pointer up an inheritance hierarchy | |
317 */ | |
318 SWIGRUNTIMEINLINE void * | |
319 SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { | |
320 return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); | |
321 } | |
322 | |
323 /* | |
324 Dynamic pointer casting. Down an inheritance hierarchy | |
325 */ | |
326 SWIGRUNTIME swig_type_info * | |
327 SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { | |
328 swig_type_info *lastty = ty; | |
329 if (!ty || !ty->dcast) return ty; | |
330 while (ty && (ty->dcast)) { | |
331 ty = (*ty->dcast)(ptr); | |
332 if (ty) lastty = ty; | |
333 } | |
334 return lastty; | |
335 } | |
336 | |
337 /* | |
338 Return the name associated with this type | |
339 */ | |
340 SWIGRUNTIMEINLINE const char * | |
341 SWIG_TypeName(const swig_type_info *ty) { | |
342 return ty->name; | |
343 } | |
344 | |
345 /* | |
346 Return the pretty name associated with this type, | |
347 that is an unmangled type name in a form presentable to the user. | |
348 */ | |
349 SWIGRUNTIME const char * | |
350 SWIG_TypePrettyName(const swig_type_info *type) { | |
351 /* The "str" field contains the equivalent pretty names of the | |
352 type, separated by vertical-bar characters. We choose | |
353 to print the last name, as it is often (?) the most | |
354 specific. */ | |
355 if (!type) return NULL; | |
356 if (type->str != NULL) { | |
357 const char *last_name = type->str; | |
358 const char *s; | |
359 for (s = type->str; *s; s++) | |
360 if (*s == '|') last_name = s+1; | |
361 return last_name; | |
362 } | |
363 else | |
364 return type->name; | |
365 } | |
366 | |
367 /* | |
368 Set the clientdata field for a type | |
369 */ | |
370 SWIGRUNTIME void | |
371 SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { | |
372 swig_cast_info *cast = ti->cast; | |
373 /* if (ti->clientdata == clientdata) return; */ | |
374 ti->clientdata = clientdata; | |
375 | |
376 while (cast) { | |
377 if (!cast->converter) { | |
378 swig_type_info *tc = cast->type; | |
379 if (!tc->clientdata) { | |
380 SWIG_TypeClientData(tc, clientdata); | |
381 } | |
382 } | |
383 cast = cast->next; | |
384 } | |
385 } | |
386 SWIGRUNTIME void | |
387 SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { | |
388 SWIG_TypeClientData(ti, clientdata); | |
389 ti->owndata = 1; | |
390 } | |
391 | |
392 /* | |
393 Search for a swig_type_info structure only by mangled name | |
394 Search is a O(log #types) | |
395 | |
396 We start searching at module start, and finish searching when start == end. | |
397 Note: if start == end at the beginning of the function, we go all the way around | |
398 the circular list. | |
399 */ | |
400 SWIGRUNTIME swig_type_info * | |
401 SWIG_MangledTypeQueryModule(swig_module_info *start, | |
402 swig_module_info *end, | |
403 const char *name) { | |
404 swig_module_info *iter = start; | |
405 do { | |
406 if (iter->size) { | |
407 register size_t l = 0; | |
408 register size_t r = iter->size - 1; | |
409 do { | |
410 /* since l+r >= 0, we can (>> 1) instead (/ 2) */ | |
411 register size_t i = (l + r) >> 1; | |
412 const char *iname = iter->types[i]->name; | |
413 if (iname) { | |
414 register int compare = strcmp(name, iname); | |
415 if (compare == 0) { | |
416 return iter->types[i]; | |
417 } else if (compare < 0) { | |
418 if (i) { | |
419 r = i - 1; | |
420 } else { | |
421 break; | |
422 } | |
423 } else if (compare > 0) { | |
424 l = i + 1; | |
425 } | |
426 } else { | |
427 break; /* should never happen */ | |
428 } | |
429 } while (l <= r); | |
430 } | |
431 iter = iter->next; | |
432 } while (iter != end); | |
433 return 0; | |
434 } | |
435 | |
436 /* | |
437 Search for a swig_type_info structure for either a mangled name or a human readable name. | |
438 It first searches the mangled names of the types, which is a O(log #types) | |
439 If a type is not found it then searches the human readable names, which is O(#types). | |
440 | |
441 We start searching at module start, and finish searching when start == end. | |
442 Note: if start == end at the beginning of the function, we go all the way around | |
443 the circular list. | |
444 */ | |
445 SWIGRUNTIME swig_type_info * | |
446 SWIG_TypeQueryModule(swig_module_info *start, | |
447 swig_module_info *end, | |
448 const char *name) { | |
449 /* STEP 1: Search the name field using binary search */ | |
450 swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); | |
451 if (ret) { | |
452 return ret; | |
453 } else { | |
454 /* STEP 2: If the type hasn't been found, do a complete search | |
455 of the str field (the human readable name) */ | |
456 swig_module_info *iter = start; | |
457 do { | |
458 register size_t i = 0; | |
459 for (; i < iter->size; ++i) { | |
460 if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) | |
461 return iter->types[i]; | |
462 } | |
463 iter = iter->next; | |
464 } while (iter != end); | |
465 } | |
466 | |
467 /* neither found a match */ | |
468 return 0; | |
469 } | |
470 | |
471 /* | |
472 Pack binary data into a string | |
473 */ | |
474 SWIGRUNTIME char * | |
475 SWIG_PackData(char *c, void *ptr, size_t sz) { | |
476 static const char hex[17] = "0123456789abcdef"; | |
477 register const unsigned char *u = (unsigned char *) ptr; | |
478 register const unsigned char *eu = u + sz; | |
479 for (; u != eu; ++u) { | |
480 register unsigned char uu = *u; | |
481 *(c++) = hex[(uu & 0xf0) >> 4]; | |
482 *(c++) = hex[uu & 0xf]; | |
483 } | |
484 return c; | |
485 } | |
486 | |
487 /* | |
488 Unpack binary data from a string | |
489 */ | |
490 SWIGRUNTIME const char * | |
491 SWIG_UnpackData(const char *c, void *ptr, size_t sz) { | |
492 register unsigned char *u = (unsigned char *) ptr; | |
493 register const unsigned char *eu = u + sz; | |
494 for (; u != eu; ++u) { | |
495 register char d = *(c++); | |
496 register unsigned char uu; | |
497 if ((d >= '0') && (d <= '9')) | |
498 uu = ((d - '0') << 4); | |
499 else if ((d >= 'a') && (d <= 'f')) | |
500 uu = ((d - ('a'-10)) << 4); | |
501 else | |
502 return (char *) 0; | |
503 d = *(c++); | |
504 if ((d >= '0') && (d <= '9')) | |
505 uu |= (d - '0'); | |
506 else if ((d >= 'a') && (d <= 'f')) | |
507 uu |= (d - ('a'-10)); | |
508 else | |
509 return (char *) 0; | |
510 *u = uu; | |
511 } | |
512 return c; | |
513 } | |
514 | |
515 /* | |
516 Pack 'void *' into a string buffer. | |
517 */ | |
518 SWIGRUNTIME char * | |
519 SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { | |
520 char *r = buff; | |
521 if ((2*sizeof(void *) + 2) > bsz) return 0; | |
522 *(r++) = '_'; | |
523 r = SWIG_PackData(r,&ptr,sizeof(void *)); | |
524 if (strlen(name) + 1 > (bsz - (r - buff))) return 0; | |
525 strcpy(r,name); | |
526 return buff; | |
527 } | |
528 | |
529 SWIGRUNTIME const char * | |
530 SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { | |
531 if (*c != '_') { | |
532 if (strcmp(c,"NULL") == 0) { | |
533 *ptr = (void *) 0; | |
534 return name; | |
535 } else { | |
536 return 0; | |
537 } | |
538 } | |
539 return SWIG_UnpackData(++c,ptr,sizeof(void *)); | |
540 } | |
541 | |
542 SWIGRUNTIME char * | |
543 SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { | |
544 char *r = buff; | |
545 size_t lname = (name ? strlen(name) : 0); | |
546 if ((2*sz + 2 + lname) > bsz) return 0; | |
547 *(r++) = '_'; | |
548 r = SWIG_PackData(r,ptr,sz); | |
549 if (lname) { | |
550 strncpy(r,name,lname+1); | |
551 } else { | |
552 *r = 0; | |
553 } | |
554 return buff; | |
555 } | |
556 | |
557 SWIGRUNTIME const char * | |
558 SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { | |
559 if (*c != '_') { | |
560 if (strcmp(c,"NULL") == 0) { | |
561 memset(ptr,0,sz); | |
562 return name; | |
563 } else { | |
564 return 0; | |
565 } | |
566 } | |
567 return SWIG_UnpackData(++c,ptr,sz); | |
568 } | |
569 | |
570 #ifdef __cplusplus | |
571 } | |
572 #endif |