 |
파이썬 마을 우리나라 파이썬 사용자들의 이야기 마을
|
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
jrcho
가입: 올린 글: 56
|
올려짐: 2004 5월 12 7:33 pm 주제: [SWIG강좌] 3.4 Typemap (3) |
|
|
3.4.4. 표준 SWIG 라이브러리 Typemaps.i
SWIG는 함수의 인자를 처리하는 데 사용되는 표준 typemap 라이브러리 typemaps.i를 제공하고 있다. Typemaps.i에는 built-in 자료형에 대한 "in" typemap과 "argout" typemap을 제공한다. 단순히 built-in type에 대한 함수 인자의 형변환은 typemaps.i로 충분히 다룰 수 있다. 또한, typemaps.i를 분석하여 다른 typemap을 작성하는 데 참고할 수 있다.
Typemaps.i에서는 다음과 같은 세가지 형태의 typemap을 제공한다.
type* INPUT 형태 : 포인터로 함수에 입력할 때
예) int* INPUT, double* INPUT, ...
type* OUTPUT 형태 : 포인터로 리턴값을 받아올 떄
예) int* OUTPUT, double* OUTPUT, ...
type* INOUT 형태 : 포인터로 함수에 입력하고 다시 리턴값을 받아올 때
예) int* INOUT, double* INOUT, ...
위에서 type은 built-in 자료형을 의미하고, INPUT, OUTPUT, INOUT은 함수 인자의 이름으로 정의해 놓고 있다. 예를 들어
void add(int x, int y, int *result) { *result = x + y; }
int sub(int *x, int *y) { return *x-*y; }
void negate(int *x) { *x = -(*x); }
와 같은 세 함수에 대해
%module example
%include typemaps.i
void add(int,int,int *OUTPUT);
int sub(int *INPUT, int *INPUT);
void negate(int *INOUT);
와 같이 typemap을 사용한다. 위에서 %include 명령은 C/C++의 #include와 같은 기능을 하는 명령이다. 이제 아래와 같이 Python에서 사용할 수 있다.
>>> a = add(3,4)
>>> print a
7
>>> b = sub(7,4)
>>> print b
3
>>> c = negate(3)
>>> print c
-3
>>>
만약 INPUT, OUTPUT, INOUT 과 같이 typemaps.i에서 정해놓은 인자명을 쓰기 싫다면, 다음과 같이 %apply 명령을 이용하여 실제 사용되는 인자명으로 typemap을 복사하면 된다.
%module example
%include "typemaps.i"
%apply int *OUTPUT { int *result };
%apply int *INPUT { int *x,int *y};
%apply int *INOUT { int *x};
void add(int x, int y, int *result);
int sub(int *x, int *y);
void negate(int *x);
두 번째 예로 하나 이상의 값을 리턴하는 경우에 대해 보기로 하자.
%module example
%include "typemaps.i"
%apply int *OUTPUT { int *rows, int *columns };
...
void get_dimensions(Matrix *m, int *rows, *columns);
위에서 get_dimensions()함수는 행령의 열과 행 수를 구하는 함수이다. Python에서의 사용은 다음과 같다.
>>> r,c = get_dimensions(m)
표준 typemap 라이브러리 typemaps.i는 built-in type에 대해 typemap을 정의한 SWIG 표준 라이브러리로, 이를 제외한 형에 대해서는 직접 typemap을 작성해야 한다. 예를 들어 void foo(Bar *OUTPUT);는 Bar에 대한 OUTPUT rule을 typemaps.i에서 정의하지 않았기 때문에 쓸 수 없다. 이런 경우는 직접 typemap을 작성해 주어야 한다. |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
|