/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/python/varargs/example.i
68 строк
2 KB
William S Fulton
[Python] Accept str in the varargs example typemaps
11 часов назад
11 часов назад
edbbe01
Код
Авторство
О чём код?
/* 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 *) PyUnicode_AsUTF8($input); } #endif 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 %{ /* In Python 2 we could use PyFile_AsFile for converting Python sys.stdout to C's stdout. This API disappeared in Python 3, so instead we use a helper function to get stdout */ FILE * stdout_stream(void) { return stdout; } 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); } %}