File: example.i

package info (click to toggle)
swig2.0 2.0.7-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 31,260 kB
  • sloc: cpp: 49,839; ansic: 25,403; java: 8,412; python: 6,579; cs: 5,773; yacc: 5,158; makefile: 5,098; sh: 4,806; ruby: 3,673; perl: 2,384; lisp: 1,741; php: 1,701; tcl: 971; ml: 619; xml: 85
file content (65 lines) | stat: -rw-r--r-- 1,611 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* File : example.i */
%module example

%{
#include <stdarg.h>
%}

/* This example illustrates SWIG's handling of varargs functions.  
   By default, variable length arguments are simply ignored.  This
   is generally appropriate for wrapping I/O functions like printf.
   You can simply format a string in the scripting language, and
   pass it directly */

int printf(const char *fmt, ...);

/* Since passing a format string might be dangerous.  Here is a slightly
   different way of wrapping a printf style function */

#if 1
/* Replace ... with char *.   */
%varargs(char *) fprintf;

/* Ignore the format string, but set it to %s */
%typemap(in,numinputs=0) const char *fmt {
	$1 = "%s";
}
#else
/* An alternative approach using typemaps */
%typemap(in) (const char *fmt, ...) {
   $1 = "%s";
   $2 = (void *) PyString_AsString($input);
}
#endif

/* Typemap just to make the example work */
%typemap(in) FILE * "$1 = PyFile_AsFile($input);";

int fprintf(FILE *, const char *fmt, ...);

/* Here is somewhat different example.  A variable length argument
   function that takes a NULL-terminated list of arguments. We
   can use a slightly different form of %varargs that specifies
   a default value and a maximum number of arguments.
 */

/* Maximum of 20 arguments with default value NULL */

%varargs(20, char *x = NULL) printv;

%inline %{
void printv(char *s, ...) {
    va_list ap;
    char *x;
    fputs(s,stdout);
    fputc(' ',stdout);
    va_start(ap, s);
    while ((x = va_arg(ap, char *))) {
      fputs(x,stdout);
      fputc(' ',stdout);
    }
    va_end(ap);
    fputc('\n',stdout);
}
%}