file.tm

file.tm

WSTPのテンプレートファイルである.

詳細

  • WSTPテンプレートファイルには,外部C関数をWolfram言語関数にリンクするためのテンプレートが含まれている.
  • 個々のテンプレートには以下のものを含むことができる:
  • :Begin:特定の関数のためのテンプレートを始める
    :Function:外部プログラムでの関数名
    :Pattern:関数を呼び出すために定義されなければならないパターン
    :Arguments:関数の引数
    :ArgumentTypes:関数の引数の形式
    :ReturnType:関数から返される値の形式
    :End:テンプレートを終了する
    :Evaluate:関数がインストールされた場合に評価するためのWolfram言語入力
    ::textコメントとして扱う
  • 任意のCコードは,.tm ファイルの中のテンプレート間に散在されることが可能である.
  • 下記の引数と戻り値のタイプ指定を使用することが可能である:
  • Integer16short
    Integer32int
    Integer64mlint64
    Real32float
    Real64double
    Real128mlextended_double
    Integer16Listshort*int(長さ)
    Integer32Listint*,int(長さ)
    Integer64Listmlint64*,int(長さ)
    Real32Listfloat*,int(長さ)
    Real64Listdouble*,int(長さ)
    Real128Listmlextended_double*,int(長さ)
    Stringchar*
    ByteStringunsigned char*int(長さ)
    UCS2Stringunsigned short*
    UTF8Stringunsigned char*,int(バイト),int(文字)
    UTF16Stringunsigned short*,int(長さ),int(文字)
    UTF32Stringunsigned int*int(長さ)
    Symbolchar*
    ByteSymbolunsigned char*int(長さ)
    UCS2Symbolunsigned short*int(長さ)
    UTF8Symbolunsigned char*int(バイト),int(文字)
    UTF16Symbolunsigned short*,int(長さ),int(文字)
    UTF32Symbolunsigned int*,int(長さ)
    ThisLinkWSLINK
    $CurrentLinkWSLINK
    Manualvoid
  • UCS2StringUCS2SymbolUTF8StringUTF8SymbolUTF16StringUTF16SymbolUTF32StringUTF32Symbolを戻り値のタイプとして使うためには,プログラマはUnicodeの文字列の代りに返されるようにWSUnicodeContainerオブジェクトを割り当てなければならない.
  • WSUnicodeContainerオブジェクトとは,テンプレートファイル内の関数間でUnicodeの文字列を簡単に渡すことができるように,Unicodeの文字列のコピーとその長さを含むラッパーである.
  • wsprepは,戻り値のタイプがリストされているUnicodeの文字列あるいは記号のタイプの1つである場合にのみ,戻り値のタイプとしてWSUnicodeContainerを含む関数のシグネチャを生成する.wsprepは,引数の1つがUnicodeの文字列あるいは記号のタイプである場合に,引数としてWSUnicodeContainerオブジェクトを関数に渡すコードは生成しない.
  • WSTPテンプレートファイルはwsprepを使ってCコードに変換される.またこれらのファイルは,wsccが使える場合には自動的に処理される.

例題

  (1)

fという名前の関数が2つの整数を引数として取り,整数を1つ返す場合のテンプレートファイルのエントリー:

:Begin:
:Function:        f
:Pattern:        f[x_Integer, y_Integer]
:Arguments:        {x, y}
:ArgumentTypes:    {Integer, Integer}
:ReturnType:    Integer
:End: