WSTestUTF16HeadWithArgCount (C 関数)

int WSTestUTF16HeadWithArgCount(WSLINK l, const unsigned short *s, int v, int *n)

l が指定するWSTP接続から読み込まれる次のオブジェクトが,頭部 s を持つ式,つまりUTF-16でコード化された長さ v の文字列であり,式の引数の数が n であることを検証する.

詳細

  • WSTestUTF16HeadWithArgCount()は,リンク上の現行の式が頭部としての記号を持つ関数ではない場合,記号名が s, とマッチしない場合,あるいは関数の引数の数が n ではない場合には失敗する.
  • WSTestUTF16HeadWithArgCount()は,関数が結果を返す際に,関数に対する引数の実際の数を n に保存する.
  • UTF-16の文字列としてコード化された記号 s は,バイトオーダーマークで始まらなければならない.
  • 記号の長さ v には,バイトオーダーマークが含まれなければならない.
  • WSTestUTF16HeadWithArgCount()は,エラーが起った場合には0を,関数が成功した場合には非零の値を返す.
  • WSTestUTF16HeadWithArgCount()が失敗した場合には,WSError()を使ってエラーコードを得るとよい.
  • WSTestUTF16HeadWithArgCount()は,関数が失敗した場合には,WSTestUTF16HeadWithArgCount()を呼び出す直前のリンク上の式に対するストリームポインタを再設定する.この操作は,プログラマがWSCreateMark(l); WSTestUTF16HeadWithArgCount(...); WSSeekToMark(...)を呼び出したかのように振舞う.
  • WSTestUTF16HeadWithArgCount()は,WSTPヘッダファイルwstp.hの中で宣言される.

例題

  (1)

#include "wstp.h"

/* A function to test whether the next expression on the Link is Plus[a,b] */

void f(WSLINK l)
{
    unsigned short symbol[5];
    int args = 2;
    const char *symbol;

    symbol[0] = 0xFEFF;
    symbol[1] = 'P';
    symbol[2] = 'l';
    symbol[3] = 'u';
    symbol[4] = 's';

    if(! WSTestUTF16HeadWithArgCount(l, (const unsigned short *)symbol, 5, &args))
    { /* Next expression is not Plus, or does not have two args */ }

    if(! WSGetSymbol(l, &symbol))
    { /* Unable to read symbol */ }

    /* Check if symbol is 'a' */

    WSReleaseSymbol(l, symbol);

    if(! WSGetSymbol(l, &symbol))
    { /* Unable to read symbol */ }

    /* Check if the symbol is 'b' */

    WSReleaseSymbol(l, symbol);
}