comparison lib/swig/swigwin-2.0.11/example_wrap.cxx @ 1899:b3009adc0e2f

Adding swig, gitignore, hgignore
author Nomad
date Mon, 21 Oct 2013 10:42:27 +0200
parents
children e78fa9082174
comparison
equal deleted inserted replaced
1867:eb580660bbbb 1899:b3009adc0e2f
1 /* ----------------------------------------------------------------------------
2 * This file was automatically generated by SWIG (http://www.swig.org).
3 * Version 2.0.11
4 *
5 * This file is not intended to be easily readable and contains a number of
6 * coding conventions designed to improve portability and efficiency. Do not make
7 * changes to this file unless you know what you are doing--modify the SWIG
8 * interface file instead.
9 * ----------------------------------------------------------------------------- */
10
11 #define SWIGLUA
12 #define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_LUA
13 #define SWIG_LUA_MODULE_GLOBAL
14
15
16 #ifdef __cplusplus
17 /* SwigValueWrapper is described in swig.swg */
18 template<typename T> class SwigValueWrapper {
19 struct SwigMovePointer {
20 T *ptr;
21 SwigMovePointer(T *p) : ptr(p) { }
22 ~SwigMovePointer() { delete ptr; }
23 SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
24 } pointer;
25 SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
26 SwigValueWrapper(const SwigValueWrapper<T>& rhs);
27 public:
28 SwigValueWrapper() : pointer(0) { }
29 SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
30 operator T&() const { return *pointer.ptr; }
31 T *operator&() { return pointer.ptr; }
32 };
33
34 template <typename T> T SwigValueInit() {
35 return T();
36 }
37 #endif
38
39 /* -----------------------------------------------------------------------------
40 * This section contains generic SWIG labels for method/variable
41 * declarations/attributes, and other compiler dependent labels.
42 * ----------------------------------------------------------------------------- */
43
44 /* template workaround for compilers that cannot correctly implement the C++ standard */
45 #ifndef SWIGTEMPLATEDISAMBIGUATOR
46 # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
47 # define SWIGTEMPLATEDISAMBIGUATOR template
48 # elif defined(__HP_aCC)
49 /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
50 /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
51 # define SWIGTEMPLATEDISAMBIGUATOR template
52 # else
53 # define SWIGTEMPLATEDISAMBIGUATOR
54 # endif
55 #endif
56
57 /* inline attribute */
58 #ifndef SWIGINLINE
59 # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
60 # define SWIGINLINE inline
61 # else
62 # define SWIGINLINE
63 # endif
64 #endif
65
66 /* attribute recognised by some compilers to avoid 'unused' warnings */
67 #ifndef SWIGUNUSED
68 # if defined(__GNUC__)
69 # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
70 # define SWIGUNUSED __attribute__ ((__unused__))
71 # else
72 # define SWIGUNUSED
73 # endif
74 # elif defined(__ICC)
75 # define SWIGUNUSED __attribute__ ((__unused__))
76 # else
77 # define SWIGUNUSED
78 # endif
79 #endif
80
81 #ifndef SWIG_MSC_UNSUPPRESS_4505
82 # if defined(_MSC_VER)
83 # pragma warning(disable : 4505) /* unreferenced local function has been removed */
84 # endif
85 #endif
86
87 #ifndef SWIGUNUSEDPARM
88 # ifdef __cplusplus
89 # define SWIGUNUSEDPARM(p)
90 # else
91 # define SWIGUNUSEDPARM(p) p SWIGUNUSED
92 # endif
93 #endif
94
95 /* internal SWIG method */
96 #ifndef SWIGINTERN
97 # define SWIGINTERN static SWIGUNUSED
98 #endif
99
100 /* internal inline SWIG method */
101 #ifndef SWIGINTERNINLINE
102 # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
103 #endif
104
105 /* exporting methods */
106 #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
107 # ifndef GCC_HASCLASSVISIBILITY
108 # define GCC_HASCLASSVISIBILITY
109 # endif
110 #endif
111
112 #ifndef SWIGEXPORT
113 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
114 # if defined(STATIC_LINKED)
115 # define SWIGEXPORT
116 # else
117 # define SWIGEXPORT __declspec(dllexport)
118 # endif
119 # else
120 # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
121 # define SWIGEXPORT __attribute__ ((visibility("default")))
122 # else
123 # define SWIGEXPORT
124 # endif
125 # endif
126 #endif
127
128 /* calling conventions for Windows */
129 #ifndef SWIGSTDCALL
130 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
131 # define SWIGSTDCALL __stdcall
132 # else
133 # define SWIGSTDCALL
134 # endif
135 #endif
136
137 /* Deal with Microsoft's attempt at deprecating C standard runtime functions */
138 #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
139 # define _CRT_SECURE_NO_DEPRECATE
140 #endif
141
142 /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
143 #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
144 # define _SCL_SECURE_NO_DEPRECATE
145 #endif
146
147
148 /* -----------------------------------------------------------------------------
149 * swigrun.swg
150 *
151 * This file contains generic C API SWIG runtime support for pointer
152 * type checking.
153 * ----------------------------------------------------------------------------- */
154
155 /* This should only be incremented when either the layout of swig_type_info changes,
156 or for whatever reason, the runtime changes incompatibly */
157 #define SWIG_RUNTIME_VERSION "4"
158
159 /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
160 #ifdef SWIG_TYPE_TABLE
161 # define SWIG_QUOTE_STRING(x) #x
162 # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
163 # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
164 #else
165 # define SWIG_TYPE_TABLE_NAME
166 #endif
167
168 /*
169 You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
170 creating a static or dynamic library from the SWIG runtime code.
171 In 99.9% of the cases, SWIG just needs to declare them as 'static'.
172
173 But only do this if strictly necessary, ie, if you have problems
174 with your compiler or suchlike.
175 */
176
177 #ifndef SWIGRUNTIME
178 # define SWIGRUNTIME SWIGINTERN
179 #endif
180
181 #ifndef SWIGRUNTIMEINLINE
182 # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
183 #endif
184
185 /* Generic buffer size */
186 #ifndef SWIG_BUFFER_SIZE
187 # define SWIG_BUFFER_SIZE 1024
188 #endif
189
190 /* Flags for pointer conversions */
191 #define SWIG_POINTER_DISOWN 0x1
192 #define SWIG_CAST_NEW_MEMORY 0x2
193
194 /* Flags for new pointer objects */
195 #define SWIG_POINTER_OWN 0x1
196
197
198 /*
199 Flags/methods for returning states.
200
201 The SWIG conversion methods, as ConvertPtr, return an integer
202 that tells if the conversion was successful or not. And if not,
203 an error code can be returned (see swigerrors.swg for the codes).
204
205 Use the following macros/flags to set or process the returning
206 states.
207
208 In old versions of SWIG, code such as the following was usually written:
209
210 if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
211 // success code
212 } else {
213 //fail code
214 }
215
216 Now you can be more explicit:
217
218 int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
219 if (SWIG_IsOK(res)) {
220 // success code
221 } else {
222 // fail code
223 }
224
225 which is the same really, but now you can also do
226
227 Type *ptr;
228 int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
229 if (SWIG_IsOK(res)) {
230 // success code
231 if (SWIG_IsNewObj(res) {
232 ...
233 delete *ptr;
234 } else {
235 ...
236 }
237 } else {
238 // fail code
239 }
240
241 I.e., now SWIG_ConvertPtr can return new objects and you can
242 identify the case and take care of the deallocation. Of course that
243 also requires SWIG_ConvertPtr to return new result values, such as
244
245 int SWIG_ConvertPtr(obj, ptr,...) {
246 if (<obj is ok>) {
247 if (<need new object>) {
248 *ptr = <ptr to new allocated object>;
249 return SWIG_NEWOBJ;
250 } else {
251 *ptr = <ptr to old object>;
252 return SWIG_OLDOBJ;
253 }
254 } else {
255 return SWIG_BADOBJ;
256 }
257 }
258
259 Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
260 more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
261 SWIG errors code.
262
263 Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
264 allows to return the 'cast rank', for example, if you have this
265
266 int food(double)
267 int fooi(int);
268
269 and you call
270
271 food(1) // cast rank '1' (1 -> 1.0)
272 fooi(1) // cast rank '0'
273
274 just use the SWIG_AddCast()/SWIG_CheckState()
275 */
276
277 #define SWIG_OK (0)
278 #define SWIG_ERROR (-1)
279 #define SWIG_IsOK(r) (r >= 0)
280 #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
281
282 /* The CastRankLimit says how many bits are used for the cast rank */
283 #define SWIG_CASTRANKLIMIT (1 << 8)
284 /* The NewMask denotes the object was created (using new/malloc) */
285 #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
286 /* The TmpMask is for in/out typemaps that use temporal objects */
287 #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
288 /* Simple returning values */
289 #define SWIG_BADOBJ (SWIG_ERROR)
290 #define SWIG_OLDOBJ (SWIG_OK)
291 #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
292 #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
293 /* Check, add and del mask methods */
294 #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
295 #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
296 #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
297 #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
298 #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
299 #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
300
301 /* Cast-Rank Mode */
302 #if defined(SWIG_CASTRANK_MODE)
303 # ifndef SWIG_TypeRank
304 # define SWIG_TypeRank unsigned long
305 # endif
306 # ifndef SWIG_MAXCASTRANK /* Default cast allowed */
307 # define SWIG_MAXCASTRANK (2)
308 # endif
309 # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
310 # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
311 SWIGINTERNINLINE int SWIG_AddCast(int r) {
312 return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
313 }
314 SWIGINTERNINLINE int SWIG_CheckState(int r) {
315 return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
316 }
317 #else /* no cast-rank mode */
318 # define SWIG_AddCast(r) (r)
319 # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
320 #endif
321
322
323 #include <string.h>
324
325 #ifdef __cplusplus
326 extern "C" {
327 #endif
328
329 typedef void *(*swig_converter_func)(void *, int *);
330 typedef struct swig_type_info *(*swig_dycast_func)(void **);
331
332 /* Structure to store information on one type */
333 typedef struct swig_type_info {
334 const char *name; /* mangled name of this type */
335 const char *str; /* human readable name of this type */
336 swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
337 struct swig_cast_info *cast; /* linked list of types that can cast into this type */
338 void *clientdata; /* language specific type data */
339 int owndata; /* flag if the structure owns the clientdata */
340 } swig_type_info;
341
342 /* Structure to store a type and conversion function used for casting */
343 typedef struct swig_cast_info {
344 swig_type_info *type; /* pointer to type that is equivalent to this type */
345 swig_converter_func converter; /* function to cast the void pointers */
346 struct swig_cast_info *next; /* pointer to next cast in linked list */
347 struct swig_cast_info *prev; /* pointer to the previous cast */
348 } swig_cast_info;
349
350 /* Structure used to store module information
351 * Each module generates one structure like this, and the runtime collects
352 * all of these structures and stores them in a circularly linked list.*/
353 typedef struct swig_module_info {
354 swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
355 size_t size; /* Number of types in this module */
356 struct swig_module_info *next; /* Pointer to next element in circularly linked list */
357 swig_type_info **type_initial; /* Array of initially generated type structures */
358 swig_cast_info **cast_initial; /* Array of initially generated casting structures */
359 void *clientdata; /* Language specific module data */
360 } swig_module_info;
361
362 /*
363 Compare two type names skipping the space characters, therefore
364 "char*" == "char *" and "Class<int>" == "Class<int >", etc.
365
366 Return 0 when the two name types are equivalent, as in
367 strncmp, but skipping ' '.
368 */
369 SWIGRUNTIME int
370 SWIG_TypeNameComp(const char *f1, const char *l1,
371 const char *f2, const char *l2) {
372 for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
373 while ((*f1 == ' ') && (f1 != l1)) ++f1;
374 while ((*f2 == ' ') && (f2 != l2)) ++f2;
375 if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
376 }
377 return (int)((l1 - f1) - (l2 - f2));
378 }
379
380 /*
381 Check type equivalence in a name list like <name1>|<name2>|...
382 Return 0 if equal, -1 if nb < tb, 1 if nb > tb
383 */
384 SWIGRUNTIME int
385 SWIG_TypeCmp(const char *nb, const char *tb) {
386 int equiv = 1;
387 const char* te = tb + strlen(tb);
388 const char* ne = nb;
389 while (equiv != 0 && *ne) {
390 for (nb = ne; *ne; ++ne) {
391 if (*ne == '|') break;
392 }
393 equiv = SWIG_TypeNameComp(nb, ne, tb, te);
394 if (*ne) ++ne;
395 }
396 return equiv;
397 }
398
399 /*
400 Check type equivalence in a name list like <name1>|<name2>|...
401 Return 0 if not equal, 1 if equal
402 */
403 SWIGRUNTIME int
404 SWIG_TypeEquiv(const char *nb, const char *tb) {
405 return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0;
406 }
407
408 /*
409 Check the typename
410 */
411 SWIGRUNTIME swig_cast_info *
412 SWIG_TypeCheck(const char *c, swig_type_info *ty) {
413 if (ty) {
414 swig_cast_info *iter = ty->cast;
415 while (iter) {
416 if (strcmp(iter->type->name, c) == 0) {
417 if (iter == ty->cast)
418 return iter;
419 /* Move iter to the top of the linked list */
420 iter->prev->next = iter->next;
421 if (iter->next)
422 iter->next->prev = iter->prev;
423 iter->next = ty->cast;
424 iter->prev = 0;
425 if (ty->cast) ty->cast->prev = iter;
426 ty->cast = iter;
427 return iter;
428 }
429 iter = iter->next;
430 }
431 }
432 return 0;
433 }
434
435 /*
436 Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
437 */
438 SWIGRUNTIME swig_cast_info *
439 SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
440 if (ty) {
441 swig_cast_info *iter = ty->cast;
442 while (iter) {
443 if (iter->type == from) {
444 if (iter == ty->cast)
445 return iter;
446 /* Move iter to the top of the linked list */
447 iter->prev->next = iter->next;
448 if (iter->next)
449 iter->next->prev = iter->prev;
450 iter->next = ty->cast;
451 iter->prev = 0;
452 if (ty->cast) ty->cast->prev = iter;
453 ty->cast = iter;
454 return iter;
455 }
456 iter = iter->next;
457 }
458 }
459 return 0;
460 }
461
462 /*
463 Cast a pointer up an inheritance hierarchy
464 */
465 SWIGRUNTIMEINLINE void *
466 SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
467 return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
468 }
469
470 /*
471 Dynamic pointer casting. Down an inheritance hierarchy
472 */
473 SWIGRUNTIME swig_type_info *
474 SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
475 swig_type_info *lastty = ty;
476 if (!ty || !ty->dcast) return ty;
477 while (ty && (ty->dcast)) {
478 ty = (*ty->dcast)(ptr);
479 if (ty) lastty = ty;
480 }
481 return lastty;
482 }
483
484 /*
485 Return the name associated with this type
486 */
487 SWIGRUNTIMEINLINE const char *
488 SWIG_TypeName(const swig_type_info *ty) {
489 return ty->name;
490 }
491
492 /*
493 Return the pretty name associated with this type,
494 that is an unmangled type name in a form presentable to the user.
495 */
496 SWIGRUNTIME const char *
497 SWIG_TypePrettyName(const swig_type_info *type) {
498 /* The "str" field contains the equivalent pretty names of the
499 type, separated by vertical-bar characters. We choose
500 to print the last name, as it is often (?) the most
501 specific. */
502 if (!type) return NULL;
503 if (type->str != NULL) {
504 const char *last_name = type->str;
505 const char *s;
506 for (s = type->str; *s; s++)
507 if (*s == '|') last_name = s+1;
508 return last_name;
509 }
510 else
511 return type->name;
512 }
513
514 /*
515 Set the clientdata field for a type
516 */
517 SWIGRUNTIME void
518 SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
519 swig_cast_info *cast = ti->cast;
520 /* if (ti->clientdata == clientdata) return; */
521 ti->clientdata = clientdata;
522
523 while (cast) {
524 if (!cast->converter) {
525 swig_type_info *tc = cast->type;
526 if (!tc->clientdata) {
527 SWIG_TypeClientData(tc, clientdata);
528 }
529 }
530 cast = cast->next;
531 }
532 }
533 SWIGRUNTIME void
534 SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
535 SWIG_TypeClientData(ti, clientdata);
536 ti->owndata = 1;
537 }
538
539 /*
540 Search for a swig_type_info structure only by mangled name
541 Search is a O(log #types)
542
543 We start searching at module start, and finish searching when start == end.
544 Note: if start == end at the beginning of the function, we go all the way around
545 the circular list.
546 */
547 SWIGRUNTIME swig_type_info *
548 SWIG_MangledTypeQueryModule(swig_module_info *start,
549 swig_module_info *end,
550 const char *name) {
551 swig_module_info *iter = start;
552 do {
553 if (iter->size) {
554 register size_t l = 0;
555 register size_t r = iter->size - 1;
556 do {
557 /* since l+r >= 0, we can (>> 1) instead (/ 2) */
558 register size_t i = (l + r) >> 1;
559 const char *iname = iter->types[i]->name;
560 if (iname) {
561 register int compare = strcmp(name, iname);
562 if (compare == 0) {
563 return iter->types[i];
564 } else if (compare < 0) {
565 if (i) {
566 r = i - 1;
567 } else {
568 break;
569 }
570 } else if (compare > 0) {
571 l = i + 1;
572 }
573 } else {
574 break; /* should never happen */
575 }
576 } while (l <= r);
577 }
578 iter = iter->next;
579 } while (iter != end);
580 return 0;
581 }
582
583 /*
584 Search for a swig_type_info structure for either a mangled name or a human readable name.
585 It first searches the mangled names of the types, which is a O(log #types)
586 If a type is not found it then searches the human readable names, which is O(#types).
587
588 We start searching at module start, and finish searching when start == end.
589 Note: if start == end at the beginning of the function, we go all the way around
590 the circular list.
591 */
592 SWIGRUNTIME swig_type_info *
593 SWIG_TypeQueryModule(swig_module_info *start,
594 swig_module_info *end,
595 const char *name) {
596 /* STEP 1: Search the name field using binary search */
597 swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
598 if (ret) {
599 return ret;
600 } else {
601 /* STEP 2: If the type hasn't been found, do a complete search
602 of the str field (the human readable name) */
603 swig_module_info *iter = start;
604 do {
605 register size_t i = 0;
606 for (; i < iter->size; ++i) {
607 if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
608 return iter->types[i];
609 }
610 iter = iter->next;
611 } while (iter != end);
612 }
613
614 /* neither found a match */
615 return 0;
616 }
617
618 /*
619 Pack binary data into a string
620 */
621 SWIGRUNTIME char *
622 SWIG_PackData(char *c, void *ptr, size_t sz) {
623 static const char hex[17] = "0123456789abcdef";
624 register const unsigned char *u = (unsigned char *) ptr;
625 register const unsigned char *eu = u + sz;
626 for (; u != eu; ++u) {
627 register unsigned char uu = *u;
628 *(c++) = hex[(uu & 0xf0) >> 4];
629 *(c++) = hex[uu & 0xf];
630 }
631 return c;
632 }
633
634 /*
635 Unpack binary data from a string
636 */
637 SWIGRUNTIME const char *
638 SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
639 register unsigned char *u = (unsigned char *) ptr;
640 register const unsigned char *eu = u + sz;
641 for (; u != eu; ++u) {
642 register char d = *(c++);
643 register unsigned char uu;
644 if ((d >= '0') && (d <= '9'))
645 uu = ((d - '0') << 4);
646 else if ((d >= 'a') && (d <= 'f'))
647 uu = ((d - ('a'-10)) << 4);
648 else
649 return (char *) 0;
650 d = *(c++);
651 if ((d >= '0') && (d <= '9'))
652 uu |= (d - '0');
653 else if ((d >= 'a') && (d <= 'f'))
654 uu |= (d - ('a'-10));
655 else
656 return (char *) 0;
657 *u = uu;
658 }
659 return c;
660 }
661
662 /*
663 Pack 'void *' into a string buffer.
664 */
665 SWIGRUNTIME char *
666 SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
667 char *r = buff;
668 if ((2*sizeof(void *) + 2) > bsz) return 0;
669 *(r++) = '_';
670 r = SWIG_PackData(r,&ptr,sizeof(void *));
671 if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
672 strcpy(r,name);
673 return buff;
674 }
675
676 SWIGRUNTIME const char *
677 SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
678 if (*c != '_') {
679 if (strcmp(c,"NULL") == 0) {
680 *ptr = (void *) 0;
681 return name;
682 } else {
683 return 0;
684 }
685 }
686 return SWIG_UnpackData(++c,ptr,sizeof(void *));
687 }
688
689 SWIGRUNTIME char *
690 SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
691 char *r = buff;
692 size_t lname = (name ? strlen(name) : 0);
693 if ((2*sz + 2 + lname) > bsz) return 0;
694 *(r++) = '_';
695 r = SWIG_PackData(r,ptr,sz);
696 if (lname) {
697 strncpy(r,name,lname+1);
698 } else {
699 *r = 0;
700 }
701 return buff;
702 }
703
704 SWIGRUNTIME const char *
705 SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
706 if (*c != '_') {
707 if (strcmp(c,"NULL") == 0) {
708 memset(ptr,0,sz);
709 return name;
710 } else {
711 return 0;
712 }
713 }
714 return SWIG_UnpackData(++c,ptr,sz);
715 }
716
717 #ifdef __cplusplus
718 }
719 #endif
720
721 /* -----------------------------------------------------------------------------
722 * luarun.swg
723 *
724 * This file contains the runtime support for Lua modules
725 * and includes code for managing global variables and pointer
726 * type checking.
727 * ----------------------------------------------------------------------------- */
728
729 #ifdef __cplusplus
730 extern "C" {
731 #endif
732
733 #include "lua.h"
734 #include "lauxlib.h"
735 #include <stdlib.h> /* for malloc */
736 #include <assert.h> /* for a few sanity tests */
737
738 /* -----------------------------------------------------------------------------
739 * Lua flavors
740 * ----------------------------------------------------------------------------- */
741
742 #define SWIG_LUA_FLAVOR_LUA 1
743 #define SWIG_LUA_FLAVOR_ELUA 2
744 #define SWIG_LUA_FLAVOR_ELUAC 3
745
746 #if !defined(SWIG_LUA_TARGET)
747 # error SWIG_LUA_TARGET not defined
748 #endif
749
750 #if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC)
751 # define SWIG_LUA_CONSTTAB_INT(B, C) LSTRKEY(B), LNUMVAL(C)
752 # define SWIG_LUA_CONSTTAB_FLOAT(B, C) LSTRKEY(B), LNUMVAL(C)
753 # define SWIG_LUA_CONSTTAB_STRING(B, C) LSTRKEY(B), LSTRVAL(C)
754 # define SWIG_LUA_CONSTTAB_CHAR(B, C) LSTRKEY(B), LNUMVAL(C)
755 #else /* SWIG_LUA_FLAVOR_LUA */
756 # define SWIG_LUA_CONSTTAB_INT(B, C) SWIG_LUA_INT, (char *)B, (long)C, 0, 0, 0
757 # define SWIG_LUA_CONSTTAB_FLOAT(B, C) SWIG_LUA_FLOAT, (char *)B, 0, (double)C, 0, 0
758 # define SWIG_LUA_CONSTTAB_STRING(B, C) SWIG_LUA_STRING, (char *)B, 0, 0, (void *)C, 0
759 # define SWIG_LUA_CONSTTAB_CHAR(B, C) SWIG_LUA_CHAR, (char *)B, (long)C, 0, 0, 0
760 #endif
761
762 #if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC)
763 # define LRO_STRVAL(v) {{.p = (char *) v}, LUA_TSTRING}
764 # define LSTRVAL LRO_STRVAL
765 #endif
766
767 /* -----------------------------------------------------------------------------
768 * compatibility defines
769 * ----------------------------------------------------------------------------- */
770
771 /* History of Lua C API length functions: In Lua 5.0 (and before?)
772 there was "lua_strlen". In Lua 5.1, this was renamed "lua_objlen",
773 but a compatibility define of "lua_strlen" was added. In Lua 5.2,
774 this function was again renamed, to "lua_rawlen" (to emphasize that
775 it doesn't call the "__len" metamethod), and the compatibility
776 define of lua_strlen was removed. All SWIG uses have been updated
777 to "lua_rawlen", and we add our own defines of that here for older
778 versions of Lua. */
779 #if !defined(LUA_VERSION_NUM) || LUA_VERSION_NUM < 501
780 # define lua_rawlen lua_strlen
781 #elif LUA_VERSION_NUM == 501
782 # define lua_rawlen lua_objlen
783 #endif
784
785
786 /* lua_pushglobaltable is the recommended "future-proof" way to get
787 the global table for Lua 5.2 and later. Here we define
788 lua_pushglobaltable ourselves for Lua versions before 5.2. */
789 #if !defined(LUA_VERSION_NUM) || LUA_VERSION_NUM < 502
790 # define lua_pushglobaltable(L) lua_pushvalue(L, LUA_GLOBALSINDEX)
791 #endif
792
793
794 /* --------------------------------------------------------------------------
795 * Helper functions for error handling
796 * -------------------------------------------------------------------------- */
797
798 /* Push the string STR on the Lua stack, like lua_pushstring, but
799 prefixed with the the location of the innermost Lua call-point
800 (as formated by luaL_where). */
801 SWIGRUNTIME void
802 SWIG_Lua_pusherrstring (lua_State *L, const char *str)
803 {
804 luaL_where (L, 1);
805 lua_pushstring (L, str);
806 lua_concat (L, 2);
807 }
808
809 /* Push a formatted string generated from FMT and following args on
810 the Lua stack, like lua_pushfstring, but prefixed with the the
811 location of the innermost Lua call-point (as formated by luaL_where). */
812 SWIGRUNTIME void
813 SWIG_Lua_pushferrstring (lua_State *L, const char *fmt, ...)
814 {
815 va_list argp;
816 va_start(argp, fmt);
817 luaL_where(L, 1);
818 lua_pushvfstring(L, fmt, argp);
819 va_end(argp);
820 lua_concat(L, 2);
821 }
822
823
824 /* -----------------------------------------------------------------------------
825 * global swig types
826 * ----------------------------------------------------------------------------- */
827 /* Constant table */
828 #define SWIG_LUA_INT 1
829 #define SWIG_LUA_FLOAT 2
830 #define SWIG_LUA_STRING 3
831 #define SWIG_LUA_POINTER 4
832 #define SWIG_LUA_BINARY 5
833 #define SWIG_LUA_CHAR 6
834
835 /* Structure for variable linking table */
836 typedef struct {
837 const char *name;
838 lua_CFunction get;
839 lua_CFunction set;
840 } swig_lua_var_info;
841
842 /* Constant information structure */
843 typedef struct {
844 int type;
845 char *name;
846 long lvalue;
847 double dvalue;
848 void *pvalue;
849 swig_type_info **ptype;
850 } swig_lua_const_info;
851
852 typedef struct {
853 const char *name;
854 lua_CFunction method;
855 } swig_lua_method;
856
857 typedef struct {
858 const char *name;
859 lua_CFunction getmethod;
860 lua_CFunction setmethod;
861 } swig_lua_attribute;
862
863 // Can be used to create namespaces. Currently used to
864 // wrap class static methods/variables/constants
865 typedef struct {
866 const char *name;
867 swig_lua_method *ns_methods;
868 swig_lua_attribute *ns_attributes;
869 swig_lua_const_info *ns_constants;
870 } swig_lua_namespace;
871
872 typedef struct swig_lua_class {
873 const char *name;
874 swig_type_info **type;
875 lua_CFunction constructor;
876 void (*destructor)(void *);
877 swig_lua_method *methods;
878 swig_lua_attribute *attributes;
879 swig_lua_namespace cls_static;
880 struct swig_lua_class **bases;
881 const char **base_names;
882 } swig_lua_class;
883
884 /* this is the struct for wrapping all pointers in SwigLua
885 */
886 typedef struct {
887 swig_type_info *type;
888 int own; /* 1 if owned & must be destroyed */
889 void *ptr;
890 } swig_lua_userdata;
891
892 /* this is the struct for wrapping arbitrary packed binary data
893 (currently it is only used for member function pointers)
894 the data ordering is similar to swig_lua_userdata, but it is currently not possible
895 to tell the two structures apart within SWIG, other than by looking at the type
896 */
897 typedef struct {
898 swig_type_info *type;
899 int own; /* 1 if owned & must be destroyed */
900 char data[1]; /* arbitary amount of data */
901 } swig_lua_rawdata;
902
903 /* Common SWIG API */
904 #define SWIG_NewPointerObj(L, ptr, type, owner) SWIG_Lua_NewPointerObj(L, (void *)ptr, type, owner)
905 #define SWIG_ConvertPtr(L,idx, ptr, type, flags) SWIG_Lua_ConvertPtr(L,idx,ptr,type,flags)
906 #define SWIG_MustGetPtr(L,idx, type,flags, argnum,fnname) SWIG_Lua_MustGetPtr(L,idx, type,flags, argnum,fnname)
907 /* for C++ member pointers, ie, member methods */
908 #define SWIG_ConvertMember(L, idx, ptr, sz, ty) SWIG_Lua_ConvertPacked(L, idx, ptr, sz, ty)
909 #define SWIG_NewMemberObj(L, ptr, sz, type) SWIG_Lua_NewPackedObj(L, ptr, sz, type)
910
911 /* Runtime API */
912 #define SWIG_GetModule(clientdata) SWIG_Lua_GetModule((lua_State*)(clientdata))
913 #define SWIG_SetModule(clientdata, pointer) SWIG_Lua_SetModule((lua_State*) (clientdata), pointer)
914 #define SWIG_MODULE_CLIENTDATA_TYPE lua_State*
915
916 /* Contract support */
917 #define SWIG_contract_assert(expr, msg) \
918 if (!(expr)) { SWIG_Lua_pusherrstring(L, (char *) msg); goto fail; } else
919
920
921 /* helper #defines */
922 #define SWIG_fail {goto fail;}
923 #define SWIG_fail_arg(func_name,argnum,type) \
924 {SWIG_Lua_pushferrstring(L,"Error in %s (arg %d), expected '%s' got '%s'",\
925 func_name,argnum,type,SWIG_Lua_typename(L,argnum));\
926 goto fail;}
927 #define SWIG_fail_ptr(func_name,argnum,type) \
928 SWIG_fail_arg(func_name,argnum,(type && type->str)?type->str:"void*")
929 #define SWIG_check_num_args(func_name,a,b) \
930 if (lua_gettop(L)<a || lua_gettop(L)>b) \
931 {SWIG_Lua_pushferrstring(L,"Error in %s expected %d..%d args, got %d",func_name,a,b,lua_gettop(L));\
932 goto fail;}
933
934
935 #define SWIG_Lua_get_table(L,n) \
936 (lua_pushstring(L, n), lua_rawget(L,-2))
937
938 #define SWIG_Lua_add_function(L,n,f) \
939 (lua_pushstring(L, n), \
940 lua_pushcfunction(L, f), \
941 lua_rawset(L,-3))
942
943 /* special helper for allowing 'nil' for usertypes */
944 #define SWIG_isptrtype(L,I) (lua_isuserdata(L,I) || lua_isnil(L,I))
945
946 #ifdef __cplusplus
947 /* Special helper for member function pointers
948 it gets the address, casts it, then dereferences it */
949 //#define SWIG_mem_fn_as_voidptr(a) (*((char**)&(a)))
950 #endif
951
952 /* storing/access of swig_module_info */
953 SWIGRUNTIME swig_module_info *
954 SWIG_Lua_GetModule(lua_State* L) {
955 swig_module_info *ret = 0;
956 lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
957 lua_rawget(L,LUA_REGISTRYINDEX);
958 if (lua_islightuserdata(L,-1))
959 ret=(swig_module_info*)lua_touserdata(L,-1);
960 lua_pop(L,1); /* tidy */
961 return ret;
962 }
963
964 SWIGRUNTIME void
965 SWIG_Lua_SetModule(lua_State* L, swig_module_info *module) {
966 /* add this all into the Lua registry: */
967 lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
968 lua_pushlightuserdata(L,(void*)module);
969 lua_rawset(L,LUA_REGISTRYINDEX);
970 }
971
972 /* -----------------------------------------------------------------------------
973 * global variable support code: modules
974 * ----------------------------------------------------------------------------- */
975
976 /* this function is called when trying to set an immutable.
977 default action is to print an error.
978 This can removed with a compile flag SWIGLUA_IGNORE_SET_IMMUTABLE */
979 SWIGINTERN int SWIG_Lua_set_immutable(lua_State* L)
980 {
981 /* there should be 1 param passed in: the new value */
982 #ifndef SWIGLUA_IGNORE_SET_IMMUTABLE
983 lua_pop(L,1); /* remove it */
984 luaL_error(L,"This variable is immutable");
985 #endif
986 return 0; /* should not return anything */
987 }
988
989 /* the module.get method used for getting linked data */
990 SWIGINTERN int SWIG_Lua_module_get(lua_State* L)
991 {
992 /* there should be 2 params passed in
993 (1) table (not the meta table)
994 (2) string name of the attribute
995 printf("SWIG_Lua_module_get %p(%s) '%s'\n",
996 lua_topointer(L,1),lua_typename(L,lua_type(L,1)),
997 lua_tostring(L,2));
998 */
999 /* get the metatable */
1000 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1001 assert(lua_isrotable(L,1)); /* just in case */
1002 #else
1003 assert(lua_istable(L,1)); /* default Lua action */
1004 #endif
1005 lua_getmetatable(L,1); /* get the metatable */
1006 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1007 assert(lua_isrotable(L,-1)); /* just in case */
1008 #else
1009 assert(lua_istable(L,-1));
1010 #endif
1011 SWIG_Lua_get_table(L,".get"); /* get the .get table */
1012 lua_remove(L,3); /* remove metatable */
1013 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1014 if (lua_isrotable(L,-1))
1015 #else
1016 if (lua_istable(L,-1))
1017 #endif
1018 {
1019 /* look for the key in the .get table */
1020 lua_pushvalue(L,2); /* key */
1021 lua_rawget(L,-2);
1022 lua_remove(L,3); /* remove .get */
1023 if (lua_iscfunction(L,-1))
1024 { /* found it so call the fn & return its value */
1025 lua_call(L,0,1);
1026 return 1;
1027 }
1028 lua_pop(L,1); /* remove the top */
1029 }
1030 lua_pop(L,1); /* remove the .get */
1031 lua_pushnil(L); /* return a nil */
1032 return 1;
1033 }
1034
1035 /* the module.set method used for setting linked data */
1036 SWIGINTERN int SWIG_Lua_module_set(lua_State* L)
1037 {
1038 /* there should be 3 params passed in
1039 (1) table (not the meta table)
1040 (2) string name of the attribute
1041 (3) any for the new value
1042 */
1043 /* get the metatable */
1044 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1045 assert(lua_isrotable(L,1)); /* just in case */
1046 #else
1047 assert(lua_istable(L,1)); /* default Lua action */
1048 #endif
1049 lua_getmetatable(L,1); /* get the metatable */
1050 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1051 assert(lua_isrotable(L,-1)); /* just in case */
1052 #else
1053 assert(lua_istable(L,-1));
1054 #endif
1055 SWIG_Lua_get_table(L,".set"); /* get the .set table */
1056 lua_remove(L,4); /* remove metatable */
1057 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
1058 if (lua_isrotable(L,-1))
1059 #else
1060 if (lua_istable(L,-1))
1061 #endif
1062 {
1063 /* look for the key in the .set table */
1064 lua_pushvalue(L,2); /* key */
1065 lua_rawget(L,-2);
1066 lua_remove(L,4); /* remove .set */
1067 if (lua_iscfunction(L,-1))
1068 { /* found it so call the fn & return its value */
1069 lua_pushvalue(L,3); /* value */
1070 lua_call(L,1,0);
1071 return 0;
1072 }
1073 #if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA)
1074 else {
1075 return 0; // Exits stoically if an invalid key is initialized.
1076 }
1077 #endif
1078 }
1079 lua_settop(L,3); /* reset back to start */
1080 /* we now have the table, key & new value, so just set directly */
1081 lua_rawset(L,1); /* add direct */
1082 return 0;
1083 }
1084
1085 #if ((SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUA) && (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC))
1086 /* registering a module in lua. Pushes the module table on the stack. */
1087 SWIGINTERN void SWIG_Lua_module_begin(lua_State* L,const char* name)
1088 {
1089 assert(lua_istable(L,-1)); /* just in case */
1090 lua_pushstring(L,name);
1091 lua_newtable(L); /* the table */
1092 /* add meta table */
1093 lua_newtable(L); /* the meta table */
1094 SWIG_Lua_add_function(L,"__index",SWIG_Lua_module_get);
1095 SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_module_set);
1096 lua_pushstring(L,".get");
1097 lua_newtable(L); /* the .get table */
1098 lua_rawset(L,-3); /* add .get into metatable */
1099 lua_pushstring(L,".set");
1100 lua_newtable(L); /* the .set table */
1101 lua_rawset(L,-3); /* add .set into metatable */
1102 lua_setmetatable(L,-2); /* sets meta table in module */
1103 #ifdef SWIG_LUA_MODULE_GLOBAL
1104 /* If requested, install the module directly into the global namespace. */
1105 lua_rawset(L,-3); /* add module into parent */
1106 SWIG_Lua_get_table(L,name); /* get the table back out */
1107 #else
1108 /* Do not install the module table as global name. The stack top has
1109 the module table with the name below. We pop the top and replace
1110 the name with it. */
1111 lua_replace(L,-2);
1112 #endif
1113 }
1114
1115 /* ending the register */
1116 SWIGINTERN void SWIG_Lua_module_end(lua_State* L)
1117 {
1118 lua_pop(L,1); /* tidy stack (remove module) */
1119 }
1120
1121 /* adding a linked variable to the module */
1122 SWIGINTERN void SWIG_Lua_module_add_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn)
1123 {
1124 assert(lua_istable(L,-1)); /* just in case */
1125 lua_getmetatable(L,-1); /* get the metatable */
1126 assert(lua_istable(L,-1)); /* just in case */
1127 SWIG_Lua_get_table(L,".get"); /* find the .get table */
1128 assert(lua_istable(L,-1)); /* should be a table: */
1129 SWIG_Lua_add_function(L,name,getFn);
1130 lua_pop(L,1); /* tidy stack (remove table) */
1131 if (setFn) /* if there is a set fn */
1132 {
1133 SWIG_Lua_get_table(L,".set"); /* find the .set table */
1134 assert(lua_istable(L,-1)); /* should be a table: */
1135 SWIG_Lua_add_function(L,name,setFn);
1136 lua_pop(L,1); /* tidy stack (remove table) */
1137 }
1138 lua_pop(L,1); /* tidy stack (remove meta) */
1139 }
1140 #endif
1141
1142 /* adding a function module */
1143 SWIGINTERN void SWIG_Lua_module_add_function(lua_State* L,const char* name,lua_CFunction fn)
1144 {
1145 SWIG_Lua_add_function(L,name,fn);
1146 }
1147
1148 /* -----------------------------------------------------------------------------
1149 * global variable support code: namespaces
1150 * ----------------------------------------------------------------------------- */
1151
1152 SWIGINTERN int SWIG_Lua_namespace_get(lua_State* L)
1153 {
1154 /* there should be 2 params passed in
1155 (1) table (not the meta table)
1156 (2) string name of the attribute
1157 */
1158 assert(lua_istable(L,-2)); /* just in case */
1159 lua_getmetatable(L,-2);
1160 assert(lua_istable(L,-1));
1161 SWIG_Lua_get_table(L,".get"); /* find the .get table */
1162 assert(lua_istable(L,-1));
1163 /* look for the key in the .get table */
1164 lua_pushvalue(L,2); /* key */
1165 lua_rawget(L,-2);
1166 lua_remove(L,-2); /* stack tidy, remove .get table */
1167 if (lua_iscfunction(L,-1))
1168 { /* found it so call the fn & return its value */
1169 lua_call(L,0,1); /* 1 value in (userdata),1 out (result) */
1170 lua_remove(L,-2); /* stack tidy, remove metatable */
1171 return 1;
1172 }
1173 lua_pop(L,1); /* remove whatever was there */
1174 /* ok, so try the .fn table */
1175 SWIG_Lua_get_table(L,".fn"); /* find the .get table */
1176 assert(lua_istable(L,-1)); /* just in case */
1177 lua_pushvalue(L,2); /* key */
1178 lua_rawget(L,-2); /* look for the fn */
1179 lua_remove(L,-2); /* stack tidy, remove .fn table */
1180 if (lua_isfunction(L,-1)) /* note: whether it's a C function or lua function */
1181 { /* found it so return the fn & let lua call it */
1182 lua_remove(L,-2); /* stack tidy, remove metatable */
1183 return 1;
1184 }
1185 lua_pop(L,1); /* remove whatever was there */
1186 return 0;
1187 }
1188
1189 SWIGINTERN int SWIG_Lua_namespace_set(lua_State* L)
1190 {
1191 /* there should be 3 params passed in
1192 (1) table (not the meta table)
1193 (2) string name of the attribute
1194 (3) any for the new value
1195 */
1196
1197 assert(lua_istable(L,1));
1198 lua_getmetatable(L,1); /* get the meta table */
1199 assert(lua_istable(L,-1));
1200
1201 SWIG_Lua_get_table(L,".set"); /* find the .set table */
1202 if (lua_istable(L,-1))
1203 {
1204 /* look for the key in the .set table */
1205 lua_pushvalue(L,2); /* key */
1206 lua_rawget(L,-2);
1207 if (lua_iscfunction(L,-1))
1208 { /* found it so call the fn & return its value */
1209 lua_pushvalue(L,3); /* value */
1210 lua_call(L,1,0);
1211 return 0;
1212 }
1213 lua_pop(L,1); /* remove the value */
1214 }
1215 lua_pop(L,1); /* remove the value .set table */
1216 return 0;
1217 }
1218
1219 SWIGINTERN void SWIG_Lua_InstallConstants(lua_State* L, swig_lua_const_info constants[]); // forward declaration
1220 SWIGINTERN void SWIG_Lua_add_class_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn); // forward declaration
1221
1222 /* helper function - register namespace methods and attributes into namespace */
1223 SWIGINTERN int SWIG_Lua_add_namespace_details(lua_State* L, swig_lua_namespace* ns)
1224 {
1225 int i = 0;
1226 assert(lua_istable(L,-1));
1227 /* There must be table at the top of the stack */
1228 SWIG_Lua_InstallConstants(L, ns->ns_constants);
1229
1230 lua_getmetatable(L,-1);
1231
1232 /* add fns */
1233 for(i=0;ns->ns_attributes[i].name;i++){
1234 SWIG_Lua_add_class_variable(L,ns->ns_attributes[i].name,ns->ns_attributes[i].getmethod,ns->ns_attributes[i].setmethod);
1235 }
1236
1237 /* add methods to the metatable */
1238 SWIG_Lua_get_table(L,".fn"); /* find the .fn table */
1239 assert(lua_istable(L,-1)); /* just in case */
1240 for(i=0;ns->ns_methods[i].name;i++){
1241 SWIG_Lua_add_function(L,ns->ns_methods[i].name,ns->ns_methods[i].method);
1242 }
1243 lua_pop(L,1);
1244
1245 /* clear stack - remove metatble */
1246 lua_pop(L,1);
1247
1248 }
1249
1250 /* helper function. creates namespace table and add it to module table */
1251 SWIGINTERN int SWIG_Lua_namespace_register(lua_State* L, swig_lua_namespace* ns)
1252 {
1253 assert(lua_istable(L,-1)); /* just in case. This is supposed to be module table */
1254 lua_checkstack(L,5);
1255 lua_pushstring(L, ns->name);
1256 lua_newtable(L); /* namespace itself */
1257 lua_newtable(L); /* metatable for namespace */
1258
1259 /* add a table called ".get" */
1260 lua_pushstring(L,".get");
1261 lua_newtable(L);
1262 lua_rawset(L,-3);
1263 /* add a table called ".set" */
1264 lua_pushstring(L,".set");
1265 lua_newtable(L);
1266 lua_rawset(L,-3);
1267 /* add a table called ".fn" */
1268 lua_pushstring(L,".fn");
1269 lua_newtable(L);
1270 lua_rawset(L,-3);
1271
1272 /* add accessor fns for using the .get,.set&.fn */
1273 SWIG_Lua_add_function(L,"__index",SWIG_Lua_namespace_get);
1274 SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_namespace_set);
1275
1276 lua_setmetatable(L,-2); /* set metatable */
1277 lua_rawset(L,-3); /* add namespace to module table */
1278 }
1279 /* -----------------------------------------------------------------------------
1280 * global variable support code: classes
1281 * ----------------------------------------------------------------------------- */
1282
1283 /* the class.get method, performs the lookup of class attributes */
1284 SWIGINTERN int SWIG_Lua_class_get(lua_State* L)
1285 {
1286 /* there should be 2 params passed in
1287 (1) userdata (not the meta table)
1288 (2) string name of the attribute
1289 */
1290 assert(lua_isuserdata(L,-2)); /* just in case */
1291 lua_getmetatable(L,-2); /* get the meta table */
1292 assert(lua_istable(L,-1)); /* just in case */
1293 SWIG_Lua_get_table(L,".get"); /* find the .get table */
1294 assert(lua_istable(L,-1)); /* just in case */
1295 /* look for the key in the .get table */
1296 lua_pushvalue(L,2); /* key */
1297 lua_rawget(L,-2);
1298 lua_remove(L,-2); /* stack tidy, remove .get table */
1299 if (lua_iscfunction(L,-1))
1300 { /* found it so call the fn & return its value */
1301 lua_pushvalue(L,1); /* the userdata */
1302 lua_call(L,1,1); /* 1 value in (userdata),1 out (result) */
1303 lua_remove(L,-2); /* stack tidy, remove metatable */
1304 return 1;
1305 }
1306 lua_pop(L,1); /* remove whatever was there */
1307 /* ok, so try the .fn table */
1308 SWIG_Lua_get_table(L,".fn"); /* find the .get table */
1309 assert(lua_istable(L,-1)); /* just in case */
1310 lua_pushvalue(L,2); /* key */
1311 lua_rawget(L,-2); /* look for the fn */
1312 lua_remove(L,-2); /* stack tidy, remove .fn table */
1313 if (lua_isfunction(L,-1)) /* note: if its a C function or lua function */
1314 { /* found it so return the fn & let lua call it */
1315 lua_remove(L,-2); /* stack tidy, remove metatable */
1316 return 1;
1317 }
1318 lua_pop(L,1); /* remove whatever was there */
1319 /* NEW: looks for the __getitem() fn
1320 this is a user provided get fn */
1321 SWIG_Lua_get_table(L,"__getitem"); /* find the __getitem fn */
1322 if (lua_iscfunction(L,-1)) /* if its there */
1323 { /* found it so call the fn & return its value */
1324 lua_pushvalue(L,1); /* the userdata */
1325 lua_pushvalue(L,2); /* the parameter */
1326 lua_call(L,2,1); /* 2 value in (userdata),1 out (result) */
1327 lua_remove(L,-2); /* stack tidy, remove metatable */
1328 return 1;
1329 }
1330 return 0; /* sorry not known */
1331 }
1332
1333 /* the class.set method, performs the lookup of class attributes */
1334 SWIGINTERN int SWIG_Lua_class_set(lua_State* L)
1335 {
1336 /* there should be 3 params passed in
1337 (1) table (not the meta table)
1338 (2) string name of the attribute
1339 (3) any for the new value
1340 printf("SWIG_Lua_class_set %p(%s) '%s' %p(%s)\n",
1341 lua_topointer(L,1),lua_typename(L,lua_type(L,1)),
1342 lua_tostring(L,2),
1343 lua_topointer(L,3),lua_typename(L,lua_type(L,3)));*/
1344
1345 assert(lua_isuserdata(L,1)); /* just in case */
1346 lua_getmetatable(L,1); /* get the meta table */
1347 assert(lua_istable(L,-1)); /* just in case */
1348
1349 SWIG_Lua_get_table(L,".set"); /* find the .set table */
1350 if (lua_istable(L,-1))
1351 {
1352 /* look for the key in the .set table */
1353 lua_pushvalue(L,2); /* key */
1354 lua_rawget(L,-2);
1355 if (lua_iscfunction(L,-1))
1356 { /* found it so call the fn & return its value */
1357 lua_pushvalue(L,1); /* userdata */
1358 lua_pushvalue(L,3); /* value */
1359 lua_call(L,2,0);
1360 return 0;
1361 }
1362 lua_pop(L,1); /* remove the value */
1363 }
1364 lua_pop(L,1); /* remove the value .set table */
1365 /* NEW: looks for the __setitem() fn
1366 this is a user provided set fn */
1367 SWIG_Lua_get_table(L,"__setitem"); /* find the fn */
1368 if (lua_iscfunction(L,-1)) /* if its there */
1369 { /* found it so call the fn & return its value */
1370 lua_pushvalue(L,1); /* the userdata */
1371 lua_pushvalue(L,2); /* the parameter */
1372 lua_pushvalue(L,3); /* the value */
1373 lua_call(L,3,0); /* 3 values in ,0 out */
1374 lua_remove(L,-2); /* stack tidy, remove metatable */
1375 return 1;
1376 }
1377 return 0;
1378 }
1379
1380 /* the class.destruct method called by the interpreter */
1381 SWIGINTERN int SWIG_Lua_class_destruct(lua_State* L)
1382 {
1383 /* there should be 1 params passed in
1384 (1) userdata (not the meta table) */
1385 swig_lua_userdata* usr;
1386 swig_lua_class* clss;
1387 assert(lua_isuserdata(L,-1)); /* just in case */
1388 usr=(swig_lua_userdata*)lua_touserdata(L,-1); /* get it */
1389 /* if must be destroyed & has a destructor */
1390 if (usr->own) /* if must be destroyed */
1391 {
1392 clss=(swig_lua_class*)usr->type->clientdata; /* get the class */
1393 if (clss && clss->destructor) /* there is a destroy fn */
1394 {
1395 clss->destructor(usr->ptr); /* bye bye */
1396 }
1397 }
1398 return 0;
1399 }
1400
1401 /* the class.__tostring method called by the interpreter and print */
1402 SWIGINTERN int SWIG_Lua_class_tostring(lua_State* L)
1403 {
1404 /* there should be 1 param passed in
1405 (1) userdata (not the metatable) */
1406 assert(lua_isuserdata(L,1)); /* just in case */
1407 unsigned long userData = (unsigned long)lua_touserdata(L,1); /* get the userdata address for later */
1408 lua_getmetatable(L,1); /* get the meta table */
1409 assert(lua_istable(L,-1)); /* just in case */
1410
1411 lua_getfield(L, -1, ".type");
1412 const char* className = lua_tostring(L, -1);
1413
1414 char output[256];
1415 sprintf(output, "<%s userdata: %lX>", className, userData);
1416
1417 lua_pushstring(L, (const char*)output);
1418 return 1;
1419 }
1420
1421 /* to manually disown some userdata */
1422 SWIGINTERN int SWIG_Lua_class_disown(lua_State* L)
1423 {
1424 /* there should be 1 params passed in
1425 (1) userdata (not the meta table) */
1426 swig_lua_userdata* usr;
1427 assert(lua_isuserdata(L,-1)); /* just in case */
1428 usr=(swig_lua_userdata*)lua_touserdata(L,-1); /* get it */
1429
1430 usr->own = 0; /* clear our ownership */
1431 return 0;
1432 }
1433
1434 /* Constructor proxy. Used when class name entry in module is not class constructor,
1435 but special table instead. */
1436 SWIGINTERN int SWIG_Lua_constructor_proxy(lua_State* L)
1437 {
1438 /* unlimited number of parameters
1439 First one is our proxy table and we should remove it
1440 Other we should pass to real constructor
1441 */
1442 assert(lua_istable(L,1));
1443 lua_pushstring(L,".constructor");
1444 lua_rawget(L,1);
1445 assert(!lua_isnil(L,-1));
1446 lua_replace(L,1); /* replace our table with real constructor */
1447 lua_call(L,lua_gettop(L)-1,1);
1448 return 1;
1449 }
1450
1451 /* gets the swig class registry (or creates it) */
1452 SWIGINTERN void SWIG_Lua_get_class_registry(lua_State* L)
1453 {
1454 /* add this all into the swig registry: */
1455 lua_pushstring(L,"SWIG");
1456 lua_rawget(L,LUA_REGISTRYINDEX); /* get the registry */
1457 if (!lua_istable(L,-1)) /* not there */
1458 { /* must be first time, so add it */
1459 lua_pop(L,1); /* remove the result */
1460 lua_pushstring(L,"SWIG");
1461 lua_newtable(L);
1462 lua_rawset(L,LUA_REGISTRYINDEX);
1463 /* then get it */
1464 lua_pushstring(L,"SWIG");
1465 lua_rawget(L,LUA_REGISTRYINDEX);
1466 }
1467 }
1468
1469 /* helper fn to get the classes metatable from the register */
1470 SWIGINTERN void SWIG_Lua_get_class_metatable(lua_State* L,const char* cname)
1471 {
1472 SWIG_Lua_get_class_registry(L); /* get the registry */
1473 lua_pushstring(L,cname); /* get the name */
1474 lua_rawget(L,-2); /* get it */
1475 lua_remove(L,-2); /* tidy up (remove registry) */
1476 }
1477
1478 /* helper add a variable to a registered class */
1479 SWIGINTERN void SWIG_Lua_add_class_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn)
1480 {
1481 assert(lua_istable(L,-1)); /* just in case */
1482 SWIG_Lua_get_table(L,".get"); /* find the .get table */
1483 assert(lua_istable(L,-1)); /* just in case */
1484 SWIG_Lua_add_function(L,name,getFn);
1485 lua_pop(L,1); /* tidy stack (remove table) */
1486 if (setFn)
1487 {
1488 SWIG_Lua_get_table(L,".set"); /* find the .set table */
1489 assert(lua_istable(L,-1)); /* just in case */
1490 SWIG_Lua_add_function(L,name,setFn);
1491 lua_pop(L,1); /* tidy stack (remove table) */
1492 }
1493 }
1494
1495 /* helper to recursively add class static details (static attributes, operations and constants) */
1496 SWIGINTERN void SWIG_Lua_add_class_static_details(lua_State* L, swig_lua_class* clss)
1497 {
1498 int i = 0;
1499 /* The class namespace table must be on the top of the stack */
1500 assert(lua_istable(L,-1));
1501 /* call all the base classes first: we can then override these later: */
1502 for(i=0;clss->bases[i];i++)
1503 {
1504 SWIG_Lua_add_class_static_details(L,clss->bases[i]);
1505 }
1506
1507 SWIG_Lua_add_namespace_details(L, &clss->cls_static);
1508 }
1509
1510 /* helper to recursively add class details (attributes & operations) */
1511 SWIGINTERN void SWIG_Lua_add_class_details(lua_State* L,swig_lua_class* clss)
1512 {
1513 int i;
1514 /* call all the base classes first: we can then override these later: */
1515 for(i=0;clss->bases[i];i++)
1516 {
1517 SWIG_Lua_add_class_details(L,clss->bases[i]);
1518 }
1519 /* add fns */
1520 for(i=0;clss->attributes[i].name;i++){
1521 SWIG_Lua_add_class_variable(L,clss->attributes[i].name,clss->attributes[i].getmethod,clss->attributes[i].setmethod);
1522 }
1523 /* add methods to the metatable */
1524 SWIG_Lua_get_table(L,".fn"); /* find the .fn table */
1525 assert(lua_istable(L,-1)); /* just in case */
1526 for(i=0;clss->methods[i].name;i++){
1527 SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method);
1528 }
1529 lua_pop(L,1); /* tidy stack (remove table) */
1530 /* add operator overloads
1531 these look ANY method which start with "__" and assume they
1532 are operator overloads & add them to the metatable
1533 (this might mess up is someone defines a method __gc (the destructor)*/
1534 for(i=0;clss->methods[i].name;i++){
1535 if (clss->methods[i].name[0]=='_' && clss->methods[i].name[1]=='_'){
1536 SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method);
1537 }
1538 }
1539 }
1540
1541 /* set up the base classes pointers.
1542 Each class structure has a list of pointers to the base class structures.
1543 This function fills them.
1544 It cannot be done at compile time, as this will not work with hireachies
1545 spread over more than one swig file.
1546 Therefore it must be done at runtime, querying the SWIG type system.
1547 */
1548 SWIGINTERN void SWIG_Lua_init_base_class(lua_State* L,swig_lua_class* clss)
1549 {
1550 int i=0;
1551 swig_module_info* module=SWIG_GetModule(L);
1552 for(i=0;clss->base_names[i];i++)
1553 {
1554 if (clss->bases[i]==0) /* not found yet */
1555 {
1556 /* lookup and cache the base class */
1557 swig_type_info *info = SWIG_TypeQueryModule(module,module,clss->base_names[i]);
1558 if (info) clss->bases[i] = (swig_lua_class *) info->clientdata;
1559 }
1560 }
1561 }
1562
1563 /* Register class static methods,attributes etc as well as constructor proxy */
1564 SWIGINTERN void SWIG_Lua_class_register_static(lua_State* L, swig_lua_class* clss)
1565 {
1566 lua_checkstack(L,5); /* just in case */
1567 assert(lua_istable(L,-1)); /* just in case */
1568 assert(strcmp(clss->name, clss->cls_static.name) == 0); /* in class those 2 must be equal */
1569
1570 SWIG_Lua_namespace_register(L,&clss->cls_static);
1571
1572 SWIG_Lua_get_table(L,clss->name); // Get namespace table back
1573 assert(lua_istable(L,-1)); /* just in case */
1574
1575 /* add its constructor to module with the name of the class
1576 so you can do MyClass(...) as well as new_MyClass(...)
1577 BUT only if a constructor is defined
1578 (this overcomes the problem of pure virtual classes without constructors)*/
1579 if (clss->constructor)
1580 {
1581 SWIG_Lua_add_function(L,".constructor", clss->constructor);
1582 lua_getmetatable(L,-1);
1583 assert(lua_istable(L,-1)); /* just in case */
1584 SWIG_Lua_add_function(L,"__call", SWIG_Lua_constructor_proxy);
1585 lua_pop(L,1);
1586 }
1587
1588 assert(lua_istable(L,-1)); /* just in case */
1589 SWIG_Lua_add_class_static_details(L, clss);
1590
1591 /* clear stack */
1592 lua_pop(L,1);
1593 }
1594
1595 /* performs the entire class registration process */
1596 SWIGINTERN void SWIG_Lua_class_register(lua_State* L,swig_lua_class* clss)
1597 {
1598 SWIG_Lua_class_register_static(L,clss);
1599
1600 SWIG_Lua_get_class_registry(L); /* get the registry */
1601 lua_pushstring(L,clss->name); /* get the name */
1602 lua_newtable(L); /* create the metatable */
1603 /* add string of class name called ".type" */
1604 lua_pushstring(L,".type");
1605 lua_pushstring(L,clss->name);
1606 lua_rawset(L,-3);
1607 /* add a table called ".get" */
1608 lua_pushstring(L,".get");
1609 lua_newtable(L);
1610 lua_rawset(L,-3);
1611 /* add a table called ".set" */
1612 lua_pushstring(L,".set");
1613 lua_newtable(L);
1614 lua_rawset(L,-3);
1615 /* add a table called ".fn" */
1616 lua_pushstring(L,".fn");
1617 lua_newtable(L);
1618 /* add manual disown method */
1619 SWIG_Lua_add_function(L,"__disown",SWIG_Lua_class_disown);
1620 lua_rawset(L,-3);
1621 /* add accessor fns for using the .get,.set&.fn */
1622 SWIG_Lua_add_function(L,"__index",SWIG_Lua_class_get);
1623 SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_class_set);
1624 SWIG_Lua_add_function(L,"__gc",SWIG_Lua_class_destruct);
1625 /* add tostring method for better output */
1626 SWIG_Lua_add_function(L,"__tostring",SWIG_Lua_class_tostring);
1627 /* add it */
1628 lua_rawset(L,-3); /* metatable into registry */
1629 lua_pop(L,1); /* tidy stack (remove registry) */
1630
1631 SWIG_Lua_get_class_metatable(L,clss->name);
1632 SWIG_Lua_add_class_details(L,clss); /* recursive adding of details (atts & ops) */
1633 lua_pop(L,1); /* tidy stack (remove class metatable) */
1634 }
1635
1636 /* -----------------------------------------------------------------------------
1637 * Class/structure conversion fns
1638 * ----------------------------------------------------------------------------- */
1639
1640 /* helper to add metatable to new lua object */
1641 SWIGINTERN void _SWIG_Lua_AddMetatable(lua_State* L,swig_type_info *type)
1642 {
1643 if (type->clientdata) /* there is clientdata: so add the metatable */
1644 {
1645 SWIG_Lua_get_class_metatable(L,((swig_lua_class*)(type->clientdata))->name);
1646 if (lua_istable(L,-1))
1647 {
1648 lua_setmetatable(L,-2);
1649 }
1650 else
1651 {
1652 lua_pop(L,1);
1653 }
1654 }
1655 }
1656
1657 /* pushes a new object into the lua stack */
1658 SWIGRUNTIME void SWIG_Lua_NewPointerObj(lua_State* L,void* ptr,swig_type_info *type, int own)
1659 {
1660 swig_lua_userdata* usr;
1661 if (!ptr){
1662 lua_pushnil(L);
1663 return;
1664 }
1665 usr=(swig_lua_userdata*)lua_newuserdata(L,sizeof(swig_lua_userdata)); /* get data */
1666 usr->ptr=ptr; /* set the ptr */
1667 usr->type=type;
1668 usr->own=own;
1669 #if (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC)
1670 _SWIG_Lua_AddMetatable(L,type); /* add metatable */
1671 #endif
1672 }
1673
1674 /* takes a object from the lua stack & converts it into an object of the correct type
1675 (if possible) */
1676 SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State* L,int index,void** ptr,swig_type_info *type,int flags)
1677 {
1678 swig_lua_userdata* usr;
1679 swig_cast_info *cast;
1680 if (lua_isnil(L,index)){*ptr=0; return SWIG_OK;} /* special case: lua nil => NULL pointer */
1681 usr=(swig_lua_userdata*)lua_touserdata(L,index); /* get data */
1682 if (usr)
1683 {
1684 if (flags & SWIG_POINTER_DISOWN) /* must disown the object */
1685 {
1686 usr->own=0;
1687 }
1688 if (!type) /* special cast void*, no casting fn */
1689 {
1690 *ptr=usr->ptr;
1691 return SWIG_OK; /* ok */
1692 }
1693 cast=SWIG_TypeCheckStruct(usr->type,type); /* performs normal type checking */
1694 if (cast)
1695 {
1696 int newmemory = 0;
1697 *ptr=SWIG_TypeCast(cast,usr->ptr,&newmemory);
1698 assert(!newmemory); /* newmemory handling not yet implemented */
1699 return SWIG_OK; /* ok */
1700 }
1701 }
1702 return SWIG_ERROR; /* error */
1703 }
1704
1705 SWIGRUNTIME void* SWIG_Lua_MustGetPtr(lua_State* L,int index,swig_type_info *type,int flags,
1706 int argnum,const char* func_name){
1707 void* result;
1708 if (!SWIG_IsOK(SWIG_ConvertPtr(L,index,&result,type,flags))){
1709 luaL_error (L,"Error in %s, expected a %s at argument number %d\n",
1710 func_name,(type && type->str)?type->str:"void*",argnum);
1711 }
1712 return result;
1713 }
1714
1715 /* pushes a packed userdata. user for member fn pointers only */
1716 SWIGRUNTIME void SWIG_Lua_NewPackedObj(lua_State* L,void* ptr,size_t size,swig_type_info *type)
1717 {
1718 swig_lua_rawdata* raw;
1719 assert(ptr); /* not acceptable to pass in a NULL value */
1720 raw=(swig_lua_rawdata*)lua_newuserdata(L,sizeof(swig_lua_rawdata)-1+size); /* alloc data */
1721 raw->type=type;
1722 raw->own=0;
1723 memcpy(raw->data,ptr,size); /* copy the data */
1724 _SWIG_Lua_AddMetatable(L,type); /* add metatable */
1725 }
1726
1727 /* converts a packed userdata. user for member fn pointers only */
1728 SWIGRUNTIME int SWIG_Lua_ConvertPacked(lua_State* L,int index,void* ptr,size_t size,swig_type_info *type)
1729 {
1730 swig_lua_rawdata* raw;
1731 raw=(swig_lua_rawdata*)lua_touserdata(L,index); /* get data */
1732 if (!raw) return SWIG_ERROR; /* error */
1733 if (type==0 || type==raw->type) /* void* or identical type */
1734 {
1735 memcpy(ptr,raw->data,size); /* copy it */
1736 return SWIG_OK; /* ok */
1737 }
1738 return SWIG_ERROR; /* error */
1739 }
1740
1741 /* a function to get the typestring of a piece of data */
1742 SWIGRUNTIME const char *SWIG_Lua_typename(lua_State *L, int tp)
1743 {
1744 swig_lua_userdata* usr;
1745 if (lua_isuserdata(L,tp))
1746 {
1747 usr=(swig_lua_userdata*)lua_touserdata(L,tp); /* get data */
1748 if (usr && usr->type && usr->type->str)
1749 return usr->type->str;
1750 return "userdata (unknown type)";
1751 }
1752 return lua_typename(L,lua_type(L,tp));
1753 }
1754
1755 /* lua callable function to get the userdata's type */
1756 SWIGRUNTIME int SWIG_Lua_type(lua_State* L)
1757 {
1758 lua_pushstring(L,SWIG_Lua_typename(L,1));
1759 return 1;
1760 }
1761
1762 /* lua callable function to compare userdata's value
1763 the issue is that two userdata may point to the same thing
1764 but to lua, they are different objects */
1765 SWIGRUNTIME int SWIG_Lua_equal(lua_State* L)
1766 {
1767 int result;
1768 swig_lua_userdata *usr1,*usr2;
1769 if (!lua_isuserdata(L,1) || !lua_isuserdata(L,2)) /* just in case */
1770 return 0; /* nil reply */
1771 usr1=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */
1772 usr2=(swig_lua_userdata*)lua_touserdata(L,2); /* get data */
1773 /*result=(usr1->ptr==usr2->ptr && usr1->type==usr2->type); only works if type is the same*/
1774 result=(usr1->ptr==usr2->ptr);
1775 lua_pushboolean(L,result);
1776 return 1;
1777 }
1778
1779 /* -----------------------------------------------------------------------------
1780 * global variable support code: class/struct typemap functions
1781 * ----------------------------------------------------------------------------- */
1782
1783 #if ((SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUA) && (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC))
1784 /* Install Constants */
1785 SWIGINTERN void
1786 SWIG_Lua_InstallConstants(lua_State* L, swig_lua_const_info constants[]) {
1787 int i;
1788 for (i = 0; constants[i].type; i++) {
1789 switch(constants[i].type) {
1790 case SWIG_LUA_INT:
1791 lua_pushstring(L,constants[i].name);
1792 lua_pushnumber(L,(lua_Number)constants[i].lvalue);
1793 lua_rawset(L,-3);
1794 break;
1795 case SWIG_LUA_FLOAT:
1796 lua_pushstring(L,constants[i].name);
1797 lua_pushnumber(L,(lua_Number)constants[i].dvalue);
1798 lua_rawset(L,-3);
1799 break;
1800 case SWIG_LUA_CHAR:
1801 lua_pushstring(L,constants[i].name);
1802 lua_pushfstring(L,"%c",(char)constants[i].lvalue);
1803 lua_rawset(L,-3);
1804 break;
1805 case SWIG_LUA_STRING:
1806 lua_pushstring(L,constants[i].name);
1807 lua_pushstring(L,(char *) constants[i].pvalue);
1808 lua_rawset(L,-3);
1809 break;
1810 case SWIG_LUA_POINTER:
1811 lua_pushstring(L,constants[i].name);
1812 SWIG_NewPointerObj(L,constants[i].pvalue, *(constants[i]).ptype,0);
1813 lua_rawset(L,-3);
1814 break;
1815 case SWIG_LUA_BINARY:
1816 lua_pushstring(L,constants[i].name);
1817 SWIG_NewMemberObj(L,constants[i].pvalue,constants[i].lvalue,*(constants[i]).ptype);
1818 lua_rawset(L,-3);
1819 break;
1820 default:
1821 break;
1822 }
1823 }
1824 }
1825 #endif
1826
1827 /* -----------------------------------------------------------------------------
1828 * executing lua code from within the wrapper
1829 * ----------------------------------------------------------------------------- */
1830
1831 #ifndef SWIG_DOSTRING_FAIL /* Allows redefining of error function */
1832 #define SWIG_DOSTRING_FAIL(S) fprintf(stderr,"%s\n",S)
1833 #endif
1834 /* Executes a C string in Lua which is a really simple way of calling lua from C
1835 Unfortunately lua keeps changing its APIs, so we need a conditional compile
1836 In lua 5.0.X its lua_dostring()
1837 In lua 5.1.X its luaL_dostring()
1838 */
1839 SWIGINTERN int
1840 SWIG_Lua_dostring(lua_State *L, const char* str) {
1841 int ok,top;
1842 if (str==0 || str[0]==0) return 0; /* nothing to do */
1843 top=lua_gettop(L); /* save stack */
1844 #if (defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM>=501))
1845 ok=luaL_dostring(L,str); /* looks like this is lua 5.1.X or later, good */
1846 #else
1847 ok=lua_dostring(L,str); /* might be lua 5.0.x, using lua_dostring */
1848 #endif
1849 if (ok!=0) {
1850 SWIG_DOSTRING_FAIL(lua_tostring(L,-1));
1851 }
1852 lua_settop(L,top); /* restore the stack */
1853 return ok;
1854 }
1855
1856 #ifdef __cplusplus
1857 }
1858 #endif
1859
1860 /* ------------------------------ end luarun.swg ------------------------------ */
1861
1862
1863 /* -------- TYPES TABLE (BEGIN) -------- */
1864
1865 static swig_type_info *swig_types[1];
1866 static swig_module_info swig_module = {swig_types, 0, 0, 0, 0, 0};
1867 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
1868 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
1869
1870 /* -------- TYPES TABLE (END) -------- */
1871
1872 #define SWIG_name "example"
1873 #define SWIG_init luaopen_example
1874 #define SWIG_init_user luaopen_example_user
1875
1876 #define SWIG_LUACODE luaopen_example_luacode
1877
1878 namespace swig {
1879 typedef struct{} LANGUAGE_OBJ;
1880 }
1881
1882
1883 #include "example.h"
1884
1885 #ifdef __cplusplus
1886 extern "C" {
1887 #endif
1888 static int _wrap_gcd(lua_State* L) {
1889 int SWIG_arg = 0;
1890 int arg1 ;
1891 int arg2 ;
1892 int result;
1893
1894 SWIG_check_num_args("gcd",2,2)
1895 if(!lua_isnumber(L,1)) SWIG_fail_arg("gcd",1,"int");
1896 if(!lua_isnumber(L,2)) SWIG_fail_arg("gcd",2,"int");
1897 arg1 = (int)lua_tonumber(L, 1);
1898 arg2 = (int)lua_tonumber(L, 2);
1899 result = (int)gcd(arg1,arg2);
1900 lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
1901 return SWIG_arg;
1902
1903 if(0) SWIG_fail;
1904
1905 fail:
1906 lua_error(L);
1907 return SWIG_arg;
1908 }
1909
1910
1911 static int _wrap_Foo_set(lua_State* L) {
1912 int SWIG_arg = 0;
1913 double arg1 ;
1914
1915 SWIG_check_num_args("Foo",1,1)
1916 if(!lua_isnumber(L,1)) SWIG_fail_arg("Foo",1,"double");
1917 arg1 = (double)lua_tonumber(L, 1);
1918 Foo = arg1;
1919
1920 return SWIG_arg;
1921
1922 if(0) SWIG_fail;
1923
1924 fail:
1925 lua_error(L);
1926 return SWIG_arg;
1927 }
1928
1929
1930 static int _wrap_Foo_get(lua_State* L) {
1931 int SWIG_arg = 0;
1932 double result;
1933
1934 SWIG_check_num_args("Foo",0,0)
1935 result = (double)Foo;
1936 lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
1937 return SWIG_arg;
1938
1939 if(0) SWIG_fail;
1940
1941 fail:
1942 lua_error(L);
1943 return SWIG_arg;
1944 }
1945
1946
1947 #ifdef __cplusplus
1948 }
1949 #endif
1950
1951 static const struct luaL_Reg swig_commands[] = {
1952 { "gcd", _wrap_gcd},
1953 {0,0}
1954 };
1955
1956 static swig_lua_var_info swig_variables[] = {
1957 { "Foo", _wrap_Foo_get, _wrap_Foo_set },
1958 {0,0,0}
1959 };
1960
1961 static swig_lua_const_info swig_constants[] = {
1962 {0,0,0,0,0,0}
1963 };
1964
1965 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
1966
1967
1968 static swig_type_info *swig_type_initial[] = {
1969 NULL
1970 };
1971
1972
1973 static swig_cast_info *swig_cast_initial[] = {
1974 NULL
1975 };
1976
1977
1978 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
1979
1980 /* -----------------------------------------------------------------------------
1981 * Type initialization:
1982 * This problem is tough by the requirement that no dynamic
1983 * memory is used. Also, since swig_type_info structures store pointers to
1984 * swig_cast_info structures and swig_cast_info structures store pointers back
1985 * to swig_type_info structures, we need some lookup code at initialization.
1986 * The idea is that swig generates all the structures that are needed.
1987 * The runtime then collects these partially filled structures.
1988 * The SWIG_InitializeModule function takes these initial arrays out of
1989 * swig_module, and does all the lookup, filling in the swig_module.types
1990 * array with the correct data and linking the correct swig_cast_info
1991 * structures together.
1992 *
1993 * The generated swig_type_info structures are assigned staticly to an initial
1994 * array. We just loop through that array, and handle each type individually.
1995 * First we lookup if this type has been already loaded, and if so, use the
1996 * loaded structure instead of the generated one. Then we have to fill in the
1997 * cast linked list. The cast data is initially stored in something like a
1998 * two-dimensional array. Each row corresponds to a type (there are the same
1999 * number of rows as there are in the swig_type_initial array). Each entry in
2000 * a column is one of the swig_cast_info structures for that type.
2001 * The cast_initial array is actually an array of arrays, because each row has
2002 * a variable number of columns. So to actually build the cast linked list,
2003 * we find the array of casts associated with the type, and loop through it
2004 * adding the casts to the list. The one last trick we need to do is making
2005 * sure the type pointer in the swig_cast_info struct is correct.
2006 *
2007 * First off, we lookup the cast->type name to see if it is already loaded.
2008 * There are three cases to handle:
2009 * 1) If the cast->type has already been loaded AND the type we are adding
2010 * casting info to has not been loaded (it is in this module), THEN we
2011 * replace the cast->type pointer with the type pointer that has already
2012 * been loaded.
2013 * 2) If BOTH types (the one we are adding casting info to, and the
2014 * cast->type) are loaded, THEN the cast info has already been loaded by
2015 * the previous module so we just ignore it.
2016 * 3) Finally, if cast->type has not already been loaded, then we add that
2017 * swig_cast_info to the linked list (because the cast->type) pointer will
2018 * be correct.
2019 * ----------------------------------------------------------------------------- */
2020
2021 #ifdef __cplusplus
2022 extern "C" {
2023 #if 0
2024 } /* c-mode */
2025 #endif
2026 #endif
2027
2028 #if 0
2029 #define SWIGRUNTIME_DEBUG
2030 #endif
2031
2032
2033 SWIGRUNTIME void
2034 SWIG_InitializeModule(void *clientdata) {
2035 size_t i;
2036 swig_module_info *module_head, *iter;
2037 int found, init;
2038
2039 /* check to see if the circular list has been setup, if not, set it up */
2040 if (swig_module.next==0) {
2041 /* Initialize the swig_module */
2042 swig_module.type_initial = swig_type_initial;
2043 swig_module.cast_initial = swig_cast_initial;
2044 swig_module.next = &swig_module;
2045 init = 1;
2046 } else {
2047 init = 0;
2048 }
2049
2050 /* Try and load any already created modules */
2051 module_head = SWIG_GetModule(clientdata);
2052 if (!module_head) {
2053 /* This is the first module loaded for this interpreter */
2054 /* so set the swig module into the interpreter */
2055 SWIG_SetModule(clientdata, &swig_module);
2056 module_head = &swig_module;
2057 } else {
2058 /* the interpreter has loaded a SWIG module, but has it loaded this one? */
2059 found=0;
2060 iter=module_head;
2061 do {
2062 if (iter==&swig_module) {
2063 found=1;
2064 break;
2065 }
2066 iter=iter->next;
2067 } while (iter!= module_head);
2068
2069 /* if the is found in the list, then all is done and we may leave */
2070 if (found) return;
2071 /* otherwise we must add out module into the list */
2072 swig_module.next = module_head->next;
2073 module_head->next = &swig_module;
2074 }
2075
2076 /* When multiple interpreters are used, a module could have already been initialized in
2077 a different interpreter, but not yet have a pointer in this interpreter.
2078 In this case, we do not want to continue adding types... everything should be
2079 set up already */
2080 if (init == 0) return;
2081
2082 /* Now work on filling in swig_module.types */
2083 #ifdef SWIGRUNTIME_DEBUG
2084 printf("SWIG_InitializeModule: size %d\n", swig_module.size);
2085 #endif
2086 for (i = 0; i < swig_module.size; ++i) {
2087 swig_type_info *type = 0;
2088 swig_type_info *ret;
2089 swig_cast_info *cast;
2090
2091 #ifdef SWIGRUNTIME_DEBUG
2092 printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
2093 #endif
2094
2095 /* if there is another module already loaded */
2096 if (swig_module.next != &swig_module) {
2097 type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
2098 }
2099 if (type) {
2100 /* Overwrite clientdata field */
2101 #ifdef SWIGRUNTIME_DEBUG
2102 printf("SWIG_InitializeModule: found type %s\n", type->name);
2103 #endif
2104 if (swig_module.type_initial[i]->clientdata) {
2105 type->clientdata = swig_module.type_initial[i]->clientdata;
2106 #ifdef SWIGRUNTIME_DEBUG
2107 printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
2108 #endif
2109 }
2110 } else {
2111 type = swig_module.type_initial[i];
2112 }
2113
2114 /* Insert casting types */
2115 cast = swig_module.cast_initial[i];
2116 while (cast->type) {
2117
2118 /* Don't need to add information already in the list */
2119 ret = 0;
2120 #ifdef SWIGRUNTIME_DEBUG
2121 printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
2122 #endif
2123 if (swig_module.next != &swig_module) {
2124 ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
2125 #ifdef SWIGRUNTIME_DEBUG
2126 if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
2127 #endif
2128 }
2129 if (ret) {
2130 if (type == swig_module.type_initial[i]) {
2131 #ifdef SWIGRUNTIME_DEBUG
2132 printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
2133 #endif
2134 cast->type = ret;
2135 ret = 0;
2136 } else {
2137 /* Check for casting already in the list */
2138 swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
2139 #ifdef SWIGRUNTIME_DEBUG
2140 if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
2141 #endif
2142 if (!ocast) ret = 0;
2143 }
2144 }
2145
2146 if (!ret) {
2147 #ifdef SWIGRUNTIME_DEBUG
2148 printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
2149 #endif
2150 if (type->cast) {
2151 type->cast->prev = cast;
2152 cast->next = type->cast;
2153 }
2154 type->cast = cast;
2155 }
2156 cast++;
2157 }
2158 /* Set entry in modules->types array equal to the type */
2159 swig_module.types[i] = type;
2160 }
2161 swig_module.types[i] = 0;
2162
2163 #ifdef SWIGRUNTIME_DEBUG
2164 printf("**** SWIG_InitializeModule: Cast List ******\n");
2165 for (i = 0; i < swig_module.size; ++i) {
2166 int j = 0;
2167 swig_cast_info *cast = swig_module.cast_initial[i];
2168 printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
2169 while (cast->type) {
2170 printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
2171 cast++;
2172 ++j;
2173 }
2174 printf("---- Total casts: %d\n",j);
2175 }
2176 printf("**** SWIG_InitializeModule: Cast List ******\n");
2177 #endif
2178 }
2179
2180 /* This function will propagate the clientdata field of type to
2181 * any new swig_type_info structures that have been added into the list
2182 * of equivalent types. It is like calling
2183 * SWIG_TypeClientData(type, clientdata) a second time.
2184 */
2185 SWIGRUNTIME void
2186 SWIG_PropagateClientData(void) {
2187 size_t i;
2188 swig_cast_info *equiv;
2189 static int init_run = 0;
2190
2191 if (init_run) return;
2192 init_run = 1;
2193
2194 for (i = 0; i < swig_module.size; i++) {
2195 if (swig_module.types[i]->clientdata) {
2196 equiv = swig_module.types[i]->cast;
2197 while (equiv) {
2198 if (!equiv->converter) {
2199 if (equiv->type && !equiv->type->clientdata)
2200 SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
2201 }
2202 equiv = equiv->next;
2203 }
2204 }
2205 }
2206 }
2207
2208 #ifdef __cplusplus
2209 #if 0
2210 { /* c-mode */
2211 #endif
2212 }
2213 #endif
2214
2215
2216
2217 /* Forward declaration of where the user's %init{} gets inserted */
2218 void SWIG_init_user(lua_State* L );
2219
2220 #ifdef __cplusplus
2221 extern "C" {
2222 #endif
2223 /* this is the initialization function
2224 added at the very end of the code
2225 the function is always called SWIG_init, but an earlier #define will rename it
2226 */
2227 #if ((SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC))
2228 LUALIB_API int SWIG_init(lua_State* L)
2229 #else
2230 SWIGEXPORT int SWIG_init(lua_State* L) /* default Lua action */
2231 #endif
2232 {
2233 #if (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC) /* valid for both Lua and eLua */
2234 int i;
2235 /* start with global table */
2236 lua_pushglobaltable (L);
2237 /* SWIG's internal initalisation */
2238 SWIG_InitializeModule((void*)L);
2239 SWIG_PropagateClientData();
2240 #endif
2241
2242 #if ((SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUA) && (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC))
2243 /* add a global fn */
2244 SWIG_Lua_add_function(L,"swig_type",SWIG_Lua_type);
2245 SWIG_Lua_add_function(L,"swig_equals",SWIG_Lua_equal);
2246 /* begin the module (its a table with the same name as the module) */
2247 SWIG_Lua_module_begin(L,SWIG_name);
2248 /* add commands/functions */
2249 for (i = 0; swig_commands[i].name; i++){
2250 SWIG_Lua_module_add_function(L,swig_commands[i].name,swig_commands[i].func);
2251 }
2252 /* add variables */
2253 for (i = 0; swig_variables[i].name; i++){
2254 SWIG_Lua_module_add_variable(L,swig_variables[i].name,swig_variables[i].get,swig_variables[i].set);
2255 }
2256 #endif
2257
2258 #if (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC)
2259 /* set up base class pointers (the hierarchy) */
2260 for (i = 0; swig_types[i]; i++){
2261 if (swig_types[i]->clientdata){
2262 SWIG_Lua_init_base_class(L,(swig_lua_class*)(swig_types[i]->clientdata));
2263 }
2264 }
2265 /* additional registration structs & classes in lua */
2266 for (i = 0; swig_types[i]; i++){
2267 if (swig_types[i]->clientdata){
2268 SWIG_Lua_class_register(L,(swig_lua_class*)(swig_types[i]->clientdata));
2269 }
2270 }
2271 #endif
2272
2273 #if ((SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUA) && (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC))
2274 /* constants */
2275 SWIG_Lua_InstallConstants(L,swig_constants);
2276 #endif
2277
2278 #if (SWIG_LUA_TARGET != SWIG_LUA_FLAVOR_ELUAC)
2279 /* invoke user-specific initialization */
2280 SWIG_init_user(L);
2281 /* end module */
2282 /* Note: We do not clean up the stack here (Lua will do this for us). At this
2283 point, we have the globals table and out module table on the stack. Returning
2284 one value makes the module table the result of the require command. */
2285 return 1;
2286 #else
2287 return 0;
2288 #endif
2289 }
2290
2291 #ifdef __cplusplus
2292 }
2293 #endif
2294
2295
2296 const char* SWIG_LUACODE=
2297 "";
2298
2299 void SWIG_init_user(lua_State* L)
2300 {
2301 /* exec Lua code if applicable */
2302 SWIG_Lua_dostring(L,SWIG_LUACODE);
2303 }
2304