Main Page   Modules   Data Structures   Globals   Appendix  

構造体 MConverter
[コード変換]

コード変換に用いられる構造体. [詳細]


変数

int lenient
int last_block
unsigned at_most
int nchars
int nbytes
enum MConversionResult result
union {
   void *   ptr
   double   dbl
   char   c [256]
status
void * internal_info


説明

コード変換に用いられる構造体。最初の3つのメンバは変換を制御する。


構造体

int MConverter::lenient

厳密な変換が必要でない場合に値を 0 以外にする。 デフォルトでは、変換は厳密である。

変換が厳密とは、デコードの際には最初の不正なバイトでコンバータが止まること、 エンコードの際には変換されるコード系でサポートされない最初の文字でコンバータが止まることを指す。 これらの場合、MConverter->result はそれぞれ MCONVERSION_RESULT_INVALID_BYTEMCONVERSION_RESULT_INVALID_CHAR となる。

変換が厳密でない場合には、デコードの際の不正なバイトはそのバイトのまま残る。 またエンコードの際には、不正な文字が Unicode 文字の場合には "<U+XXXX>" に、そうでない場合には "<M+XXXXXX>" に置き換えられる。

int MConverter::last_block

バイト列の終端のブロックをデコードする際、または文字列の終端のブロックをエンコードする際は、値を 0 以外にする。この値は以下のように変換に影響する。

デコーディングの際に最後の数バイトが正しいバイトシークエンスを形成するには短すぎる場合:

値が 0 でなければ、変換はそのシークエンスの最初のバイトにおいて、エラー (MCONVERSION_RESULT_INVALID_BYTE) で終る。

値が 0 ならば、変換は成功して終る。 問題の数バイトはキャリーオーバとしてコンバータに保持され、変換の続きを行う際に変換するバイト列の前に付けられる。

エンコーディングの際にコード系が文脈依存の場合、

値が 0 でなければ、コンテキストを最初に戻すためのバイト列がソースの文字とかかわりなく変換の結果生成されることがある。

値が 0 ならば、そのようなバイト列は生成されない。

unsigned MConverter::at_most

0 でなければ、変換される最大の文字数を指定する。

int MConverter::nchars

以下の3つのメンバは変換の結果を表すためのものである。

最近にデコード/エンコードされた文字数。

int MConverter::nbytes

最近にデコード/エンコードされたバイト数。

enum MConversionResult MConverter::result

コード変換の結果を示すコード。

void* MConverter::ptr

double MConverter::dbl

char MConverter::c[256]

union { ... } MConverter::status

コード変換の状況に関する種々の情報。内容はコード系のタイプによって異なる。 status はどのような型へのキャストに対しても安全なようにメモリアラインされており、また最低256バイトのメモリ領域が使えるようになっている。

void* MConverter::internal_info

このメンバは内部的に使用され、アプリケーションプログラムは触れてはならない。


このページの先頭

Main Page   Modules   Data Structures   Globals   Appendix  

mulemark