![]() |
![]() |
|
|
フィールド化バッファを移動する関数
フィールド化バッファの位置に関する唯一の制約は、フィールド化バッファを short 型境界に調整しなければならないことです。この制約がなければ、フィールド化バッファをメモリ内で自由に移動できます。
Fmove
src がフィールド化バッファを指し、dest がフィールド化バッファを保持できるサイズの記憶領域を指す場合は、以下のコードを使用してフィールド化バッファを移動できます。
FBFR *src;
char *dest;
. . .
memcpy(dest, src, Fsizeof(src));
C の実行時メモリ管理関数の 1 つである memcpy は、指定したバイト数のバッファ (3 つ目の引数で指定) を、指定した領域 (2 つ目の引数で指定) から別の領域 (1 つ目の引数で指定) に移動します。
memcpy を使用するとフィールド化バッファをコピーできますが、コピー先のバッファは、コピー元と同じになります。たとえば、コピー先の空き領域のバイト数は、コピー元の空き領域のバイト数と同じです。
Fmove は、memcpy と同じように動作します。ただし、明示的に長さを指定する必要はありません (自動的に算出されます)。
int
Fmove(char *dest, FBFR *src)
以下はパラメータの説明です。
たとえば、次のコードでは、Fmove は、ソース・バッファがフィールド化バッファかどうかを確認しますが、このバッファの変更は行いません。
FBFR *src;
char *dest;
. . .
if(Fmove(dest,src) < 0)
F_error("pgm_name");
宛先バッファは、フィールド化バッファ (Falloc で割り当てられたバッファ) でなくてもかまいませんが、short 型境界に調整されている必要があります (FML32 では 4 バイト)。したがって、Fmove は、フィールド化バッファをフィールド化バッファ以外のバッファにコピーする必要がある時に、Fcpy の代替関数として機能します。ただし Fmove は、宛先バッファに十分な領域があるかどうかの確認は行いません。
値が FLD_PTR 型の場合、Fmove32 はバッファ・ポインタを転送します。アプリケーション・プログラマは、対応するポインタの移動に応じてバッファの再割り当て、および解放を管理しなければなりません。FLD_PTR フィールドが指すバッファは、tpalloc(3c) を呼び出して割り当てます。
詳細については、『BEA Tuxedo FML リファレンス』の「Fmove、Fmove32(3fml)」を参照してください。
Fcpy
Fcpy は、あるフィールド化バッファを別のフィールド化バッファで上書きするために使用します。
int
Fcpy(FBFR *dest, FBFR *src)
以下はパラメータの説明です。
Fcpy は、上書きされたフィールド化バッファの全体の長さを保持するため、フィールド化バッファのサイズを拡大または縮小する場合に便利です。次の例を参照してください。
FBFR *src, *dest;
. . .
if(Fcpy(dest, src) < 0)
F_error("pgm_name");
Fmove の dest は、初期化されていない領域を指す場合があります。しかし、Fcpy の dest には、初期化されたフィールド化バッファ (Falloc で割り当てられる) を指定する必要があります。さらに、Fcpy は、dest に指定されたバッファが十分な大きさであるかどうかも検証します。
注記 フィールド化バッファのサイズを、現在格納されているデータの領域より小さくすることはできません。
Fmove と同じく、Fcpy は、ソース・バッファを変更しません。
値が FLD_PTR 型の場合、Fcpy32 はバッファ・ポインタをコピーします。アプリケーション・プログラマは、関連するポインタがコピーされたときのバッファの再割り当てと解放を管理する必要があります。FLD_PTR フィールドが指すバッファは、tpalloc(3c) を呼び出して割り当てます。
詳細については、『BEA Tuxedo FML リファレンス』の「Fcpy、Fcpy32(3fml)」を参照してください。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|