FreeMat v4.0 日本語ドキュメント
FreeMat外部インターフェース

 

ドキュメント目次

  • cenum Cタイプの関数の参照
  • ctypedefine Cタイプの定義
  • ctypeprint  Cタイプのプリント
  • ctypefreeze  FreeMatタイプをCタイプへコンバート
  • ctypesize  C構造体のサイズを計算
  • ctypethaw  C構造体をFreeMat構造体へコンバート
  • loadlib  関数ライブラリのロード
  • import  外部関数のインポート
  • ctypecast  FreeMat構造体をC構造体へキャスト
  • ctypenew  C構造体の新しいインスタンスを作成
  • ctyperead  ファイルからC構造体を読み出し
  • ctypewrite  C Typedefをファイルへ書き出し

--------------------------------------------------------------------

cenum Cタイプの関数の参照

【構文】
enum_int = cenum(enum_type,enum_string)
enum_string = cenum(enum_type,enum_int)
※ 本関数はCで定義された(ctypedefine)文字列を使用可能に
します。

--------------------------------------------------------------------

ctypedefine Cタイプの定義
【構文】
ctypedefine(typeclass,typename,...)

※ 本関数は、FreeMatで使用するCの関数を定義することが
できます。
”typeclass”に入る文字列は'struct', 'alias', 'enum'です。
”typename”はCタイプの名前です。

【例】
ctypedefine('struct',typename,field1,type1,field2,type2,...)
ctypedefine('alias',typename,aliased_typename)
-------------------------------------------
ctypeprint Cタイプのプリント
【構文】
ctypeprint(typename)

※ 本関数はコンソールへCタイプを出力します。

 

--------------------------------------------------------------------

ctypefreeze FreeMatタイプをCタイプへコンバート
【構文】
 byte_array = ctypefreeze(mystruct, 'typename') 

 

--------------------------------------------------------------------
ctypesize C構造体のサイズを計算

【構文】

size = ctypesize('typename')
size = ctypesize('typename',count)
※ countは多重構造体の数を示します。
詳しくは、ctypedefine のヘルプへ。 

 

--------------------------------------------------------------------
ctypethaw C構造体をFreeMat構造体へコンバート
【構文】

mystruct = ctypethaw(byte_array, 'typename') 
mystruct = ctypethaw(byte_array, 'typename', count)
[mystruct,byte_array_remaining] = ctypethaw(byte_array, 'typename',...) 
※ byte_arrayはUINT8型です。 
 
 
-------------------------------------------
loadlib 関数ライブラリのロード
【構文】
loadlib(libfile, symbolname, functionname, nargin, nargout)
※ import関数の方が簡潔なアプローチ 

 
-------------------------------------------
import 外部関数のインポート
【構文】

import(libraryname,symbol,function,return,arguments)
libraryname:ライブラリ名
symbol:ライブラリ内でのシンボル名
function:FreeMat上での関数名
return:返値の型
arguments :
 
【例】
あるCプログラムがあるとします。

addArrays.c

 void addArrays(int N, float *a, float *b, float *c) 

{ int i; 

for (i=0;i<N;i++) 

c[i] = a[i] + b[i]; 

}

これをダイナミックライブラリadd.soにコンパイルします。そのコマンドは

import('add.so','addArrays','addArrays','void', ... 'int32 N, float[N] a, float[N] b, float[N] &c'); 

となります。 

この後は、この関数がFreeMatで書かれたものとして実行します。

--> if (strcmp(computer,'MAC')) system('gcc -bundle -flat_namespace -undefined suppress -o add.so addArrays.c'); end;

 --> if (~strcmp(computer,'MAC')) system('gcc -shared -fPIC -o add.so addArrays.c'); end; 

--> import('add.so','addArrays','addArrays','void','int32 N, float[N] a, float[N] b, float[N] &c');

 --> a = [3,2,3,1];

 --> b = [5,6,0,2];

 --> c = [0,0,0,0]; 

--> addArrays(length(a),a,b,c) 

ans = []

 --> c 

ans = 8 8 3 3 

--> quit

 

---------------------------------------------
ctypecast FreeMat構造体をC構造体へキャスト
【構文】
s = ctypecast(s,typename)

 
--------------------------------------------------------------------
ctypenew C構造体の新しいインスタンスを作成

【構文】
a = ctypenew('typename')
a = ctypenew('typename',count)

※ ”count”は行列の場合 

 
--------------------------------------------
ctyperead ファイルからC構造体を読み出し

【構文】
a = ctyperead(fid,'typename')
a = ctyperead(fid,'typename',count)
 

 
---------------------------------------------
ctypewrite C Typedefをファイルへ書き出し
【構文】
ctypewrite(fid,a,'typename')