WSUnicodeContainer (C 関数)

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

詳細

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

例題

  (1)

#include "wstp.h"

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

void f(WSUnicodeContainer *container, WSLINK link)
{
    if(container == (WSUnicodeContainer *)0)
        return;

    switch(WSUnicodeStringType(container))
    {
        case UCS2ContainerType:
            if(! WSPutUCS2String(link, WSUCS2String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UCS-2 encoded string */ }
            break;
        case UTF8ContainerType:
            if(! WSPutUTF8String(link, WSUTF8String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-8 encoded string */ }
            break;
        case UTF16ContainerType:
            if(! WSPutUTF16String(link, WSUTF16String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-16 encoded string */ }
            break;
        case UTF32ContainerType:
            if(! WSPutUTF32String(link, WSUTF32String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-32 encoded string */ }
            break;
    }

    WSReleaseUnicodeContainer(container);
}