Cライブラリに関数があります。これは、引数の1つとしてrunsim()
ポインタを取り、はによって与えられますstruct repdata
struct repdata
struct repdata {
int *var1;
int *var2;
int *var3;
char *var4;
double *var5;
double *var6;
int *var7;
};
C のみを使用する場合struct repdata
、関数を呼び出す型の変数を初期化します。
struct repdata data;
void create_data_container(struct repdata *data, int len_data)
{
data -> var1 = malloc( sizeof(int) * len_data );
data -> var2 = malloc( sizeof(int) * len_data );
data -> var3 = malloc( sizeof(int) * len_data );
data -> var4 = malloc( sizeof(char) * len_data );
data -> var5 = malloc( sizeof(double) * len_data);
data -> var6 = malloc( sizeof(double) * len_data);
data -> var7 = malloc( sizeof(int) * len_data);
}
シミュレーションが進行するにつれて、この構造体を埋めます。データをファイルに書き込んだ後、標準を使用してメモリを解放します
free(data.var1);
free(data.var2);
.
.
.
free(data.var7);
runsim()
Python Ctypes を使用して Python から関数を呼び出したい。このために、引数struct repdata
の 1 つとして変数 (の型と同等) へのポインターを渡す必要があります。runsim()
Pythonstruct repdata
で、次の方法で同等のものを定義したとします。
import ctypes as C
class Repdata(C.Structure):
_fields_ = [
("var1", C.POINTER(C.c_int)),
("var2", C.POINTER(C.c_int)),
("var3", C.POINTER(C.c_int)),
("var4", C.POINTER(C.c_char)),
("var5", C.POINTER(C.c_double)),
("var6", C.POINTER(C.c_double)),
("var7", C.POINTER(C.c_int)),
]
create_data_container
Python側で上記の関数に相当するものは何ですか? C コードに渡すことができ、レプリケーション データを格納するための十分なメモリがある Repdata のインスタンスを初期化したいと考えています。また、シミュレーションが完了したら、Python からメモリを解放するにはどうすればよいですか?
Ubuntu Linux 12.04 を使用しています。
よろしくお願いします。