파이썬 마을 게시판 인덱스 파이썬 마을
우리나라 파이썬 사용자들의 이야기 마을
 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 
Google
python.or.kr Web

[SWIG강좌] 3.4 Typemap (3)

 
글 쓰기   답변 달기    파이썬 마을 게시판 인덱스 -> 파이썬 팁/강좌/모듈소개 모음
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
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을 작성해 주어야 한다.
위로
사용자 정보 보기 비밀 메시지 보내기    
이전 글 표시:   
글 쓰기   답변 달기    파이썬 마을 게시판 인덱스 -> 파이썬 팁/강좌/모듈소개 모음 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다



Powered by phpBB © 2001, 2005 phpBB Group
회선/장비: Daum DNA , 관리: 장혜식,서상현