The great merge
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4141 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
5fcae5eb66
commit
12a43edc2d
1508 changed files with 125983 additions and 44037 deletions
19
Examples/python/varargs/Makefile
Normal file
19
Examples/python/varargs/Makefile
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
TOP = ../..
|
||||
SWIG = $(TOP)/../swig
|
||||
SRCS =
|
||||
TARGET = example
|
||||
INTERFACE = example.i
|
||||
|
||||
all::
|
||||
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||
TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' python
|
||||
|
||||
static::
|
||||
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||
TARGET='mypython' INTERFACE='$(INTERFACE)' python_static
|
||||
|
||||
clean::
|
||||
$(MAKE) -f $(TOP)/Makefile python_clean
|
||||
rm -f $(TARGET).py
|
||||
|
||||
check: all
|
||||
65
Examples/python/varargs/example.i
Normal file
65
Examples/python/varargs/example.i
Normal file
|
|
@ -0,0 +1,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(ignore) 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);
|
||||
}
|
||||
%}
|
||||
|
||||
34
Examples/python/varargs/runme.py
Normal file
34
Examples/python/varargs/runme.py
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# file: example.py
|
||||
|
||||
import sys
|
||||
import example
|
||||
|
||||
# Call printf
|
||||
example.printf("Hello World. I'm printf\n")
|
||||
|
||||
# Note: We call printf, but use *python* string formatting
|
||||
for i in range(0,10):
|
||||
example.printf("i is %d\n" % i)
|
||||
|
||||
# This will probably be garbled because %d is interpreted by C
|
||||
example.printf("The value is %d\n")
|
||||
|
||||
# Call fprintf
|
||||
example.fprintf(sys.stdout,"Hello World. I'm fprintf\n")
|
||||
for i in range(0,10):
|
||||
example.fprintf(sys.stdout,"i is %d\n" % i)
|
||||
|
||||
# This won't be garbled since %d is not interpreted
|
||||
example.fprintf(sys.stdout,"The value is %d\n")
|
||||
|
||||
# This function calls our NULL-terminated function
|
||||
|
||||
example.printv("Hello","World","this","is","a","test.")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue