![]() |
![]() |
|
|
FML と VIEWS:16 ビット・インターフェイスと 32 ビット・インターフェイス
FML は、2 種類あります。従来の FML インターフェイスは、フィールド長に 16 ビットの値を使用し、フィールドを識別する情報を格納します。したがって、FML16 と呼ばれます。FML16 では、8191個の一意のフィールド、個々のフィールド長は 64K バイト、フィールド化バッファの総容量は 64K に制限されます。このインターフェイスの定義、型、および関数のプロトタイプは fml.h 内にあり、このファイルは FML16 インターフェイスを使用するアプリケーション・プログラムに組み込む必要があります。各関数は、-lfml にあります。
もう 1 つのインターフェイスである FML32 は、フィールド長および識別子に 32 ビットの値を使用します。FML32 では、約 3 千万のフィールドを使用でき、約 20 GB のフィールド長およびバッファ長を使用できます。FML32 の定義、型、および関数のプロトタイプは、fml32.h 内にあります。各関数は、-lfml32 にあります。FML32 の定義、型、および関数名には、すべて接尾辞「32」が付きます (MAXFBLEN32、FBFR32、FLDID32、FLDLEN32、F_OVHD32、Fchg32、エラー・コード Ferror32 など)。環境変数にも接頭辞「32」が付きます (FLDTBLDIR32、FIELDTBLS32、VIEWFILES32、VIEWDIR32 など)。FML32 では、フィールド化バッファのポインタは「FBFR32 *」型、フィールド長は FLDLEN32 型、フィールドのオカレンス数は FLDOCC32 です。FML32 バッファには、デフォルトで 4 バイトの調整が必要です。
正しく記述された FML16 アプリケーションは、簡単に FML32 インターフェイスに変更できます。FML 関数の呼び出しに使用する変数は、すべて適切な typedef (FLDID、FLDLEN、および FLDOCC) により定義されている必要があります。FML の型付きバッファに対して tpalloc(3c) を呼び出すときは、FML の代わりに FMLTYPE で定義する必要があります。アプリケーションのソース・コードには、fml.h の代わりに fml32.h を指定し、fml1632.h を組み込むことで 32 ビットの関数を使用できるようになります。fml1632.h には、すべての 16 ビットの型定義を 32 ビット版に変換したり、16 ビットの関数やマクロを 32 ビット版に変換するマクロが含まれています。
FML32 のフィールド化バッファを FML16 のフィールド化バッファに変換する関数や、その逆の変換を行う関数も提供されています。
#include "fml.h"
#include "fml32.h"
int
F32to16(FBFR *dest, FBFR32 *src)
int
F16to32(FBFR32 *dest, FBFR *src)
F32to16 は、32 ビットの FML バッファを 16 ビットの FML バッファに変換します。これは、フィールド対フィールドのバッファの変換を行い、フィールド化バッファのインデックスを作成することによって行ないます。FLDID32 から FLDID を生成し、フィールド値 (string 型および carray 型フィールドではフィールド長も含む) をコピーすると、フィールドは変換されます。
dest は、変換後のフィールド化バッファを示すポインタ (宛先バッファ) であり、 src は、変換元のフィールド化バッファを示すポインタ (ソース・バッファ) です。ソース・バッファは変更されません。
これらの関数は、領域の不足により失敗する可能性があります。操作を完了するには、十分な追加領域を割り当ててから関数を再度発行します。F16to32 は、16 ビットの FML バッファを 32 ビットの FML バッファに変換します。この関数は、fml32 ライブラリまたは共用オブジェクトに格納されており、エラーが発生すると Ferror32 が設定されます。F32to16 は、fml ライブラリまたは共用オブジェクトに格納されており、エラーが発生すると Ferror が設定されます。これらの関数を使用するためには、fml.h および fml32.h の両方をインクルードする必要があることに注意してください。同じファイルに、fml1632.h をインクルードする必要はありません。
埋め込み型バッファのフィールド型 (FLD_PTR、FLD_FML32、および FLD_VIEW32) は、FML32 でのみサポートされています。FLD_PTR 型、FLD_FML32 型、または FLD_VIEW32 型のフィールドを含むバッファを使用すると、F32to16 が失敗し、FBADFLD エラーが返されます。これらの関数に対して F16to32 を呼び出しても、何も起こりません。
注記 以降の節では、16 ビットの関数のみ説明し、対応する FML32 および VIEW32 関数は説明しません。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|