MLUnicodeContainer (C 関数)

MLUnicodeContainerWSUnicodeContainerに置き換えられた.

MathLinkのテンプレートプログラム内の関数間でUnicodeの文字列を容易に渡すことができるように,UCS-2,UTF-8,UTF-16,UTF-32のいずれかでコード化された文字列その長さを保存するMathLinkの型である.

詳細

  • 支援マクロMLUnicodeStringLength(container)を使うと,Unicodeの文字列を保存するのに使われたコード単位に数にアクセスすることができる.コード単位の型は,コンテナに含まれるUnicodeの文字列の型によって異なる.
  • 支援マクロMLUCS2String(container)MLUTF8String(container)MLUTF16String(container)MLUTF32String(container)を使うと,コンテナに含まれる文字列の最初のコード単位へのポインタを得ることができる.
  • コンテナ内の文字列のMLUnicodeContainerTypeの値には,支援マクロMLUnicodeStringType(container)を使ってアクセスする.
  • 支援マクロは,MLUnicodeContainerへのポインタ上で働く.
  • ほとんどの場合,プログラマがMLUnicodeContainerオブジェクトの内容にアクセスする必要はないが,UCS2StringUCS2SymbolUTF8StringUTF8SymbolUTF16StringUTF16SymbolUTF32StringUTF32Symbolのうちのいずれかの mprepの戻り型を使った場合には,代りにMLUnicodeContainerオブジェクトの内容を戻り値としてMathLinkテンプレート関数に渡す.
  • MathLink API関数MLNewUnicodeContainer()を使うと,新しいコンテナオブジェクトを割り当てることができる.MLReleaseUnicodeContainer()を使うと,このオブジェクトによって使われたメモリを解放することができる.
  • ほとんどの場合,プログラマがMLUnicodeContainerオブジェクトを解放するのにMLReleaseUnicodeContainer()を直接呼び出す必要はない.代りに,mprepが自動的にMLUnicodeContainerオブジェクトを解放するコードを生成する.
  • MLUnicodeContainerは,MathLinkヘッダファイルmathlink.hで宣言される.

例題

  (1)

#include "mathlink.h"

/* A simple function for sending a Unicode string using a MLUnicodeContainer object */

void f(MLUnicodeContainer *container, MLINK link)
{
    if(container == (MLUnicodeContainer *)0)
        return;

    switch(MLUnicodeStringType(container))
    {
        case UCS2ContainerType:
            if(! MLPutUCS2String(link, MLUCS2String(container),
                MLUnicodeStringLength(container)))
            { /* Unable to send the UCS-2 encoded string */ }
            break;
        case UTF8ContainerType:
            if(! MLPutUTF8String(link, MLUTF8String(container),
                MLUnicodeStringLength(container)))
            { /* Unable to send the UTF-8 encoded string */ }
            break;
        case UTF16ContainerType:
            if(! MLPutUTF16String(link, MLUTF16String(container),
                MLUnicodeStringLength(container)))
            { /* Unable to send the UTF-16 encoded string */ }
            break;
        case UTF32ContainerType:
            if(! MLPutUTF32String(link, MLUTF32String(container),
                MLUnicodeStringLength(container)))
            { /* Unable to send the UTF-32 encoded string */ }
            break;
    }

    MLReleaseUnicodeContainer(container);
}