![]() |
![]() |
|
|
インデックスを操作する関数
フィールド化バッファを Finit または Falloc で初期化すると、自動的にインデックスが設定されます。このインデックスにより、フィールド化バッファへのアクセスが促進されますが、プログラマ側からはインデックス処理が見えません。フィールド化バッファにフィールドを追加したり、削除すると、インデックスが自動的に更新されます。
ただし、記憶装置に長期に渡ってフィールド化バッファを格納したり、協調動作するプロセス間でフィールド化バッファを転送する場合は、フィールド化バッファの受信時に、インデックスを削除したり、再生成して領域を節約できます。ここで説明する関数は、このようなインデックス操作を実行します。
Fidxused
Fidxused は、バッファのインデックスが占有する領域を返します。
long
Fidxused(FBFR *fbfr)
fbfr は、フィールド化バッファに対するポインタです。
この関数を使用すると、バッファのインデックスのサイズを判別し、インデックスを削除した方が時間や領域を節約できるかどうかを判別できます。
詳細については、『BEA Tuxedo FML リファレンス』の「Fidxused、Fidxused32(3fml)」を参照してください。
Findex
Findex を使用すると、インデックスが設定されていないフィールド化バッファにインデックスを設定できます。
int
Findex(FBFR *fbfr.FLDOCC intvl)
以下はパラメータの説明です。
Findexの 2 つ目の引数は、バッファのインデックス付けの間隔を指定します。0 を指定すると、FSTDXINT 値 (fml.h で定義) が使用されます。間隔 1 を指定すると、すべてのフィールドにインデックスが設定されます。
インデックス付けの間隔を増やしてバッファのインデックスを再設定すると、ユーザ・データ用のバッファの空き領域を増やすことができます。ただし、処理時間の高速化と空き領域の確保を一度に両方実現することはできません。一般的に、インデックスの数を減らす、つまりインデックスの間隔を大きくすると、フィールドの検索に時間がかかります。ほとんどの操作では、空き領域が少なくなると、まず、すべてのインデックスが削除されます。それができない場合は、エラー・メッセージが返されます。
詳細については、『BEA Tuxedo FML リファレンス』の「Findex、Findex32(3fml)」を参照してください。
Frstrindex
インデックスの削除後に、フィールド・バッファを変更していない場合は、この関数を Findex の代わりに使用できます。
int
Frstrindex(FBFR *fbfr, FLDOCC numidx)
以下はパラメータの説明です。
詳細については、『BEA Tuxedo FML リファレンス』の「Frstrindex、Frstrindex32(3fml)」を参照してください。
Funindex
Funindex は、フィールド化バッファのインデックスを削除し、削除前のバッファ内のインデックス数を返します。
FLDOCC
Funindex(FBFR *fbfr)
fbfr は、フィールド化バッファに対するポインタです。
詳細については、『BEA Tuxedo FML リファレンス』の「Funindex、Funindex32(3fml)」を参照してください。
インデックスを設定しないでフィールド化バッファを送信する例
インデックスを設定しないでフィールド化バッファを送信するには、次の手順に従います。
save = Funindex(fbfr);
num_to_send = Fused(fbfr);
transmit(fbfr,num_to_send);
Frstrindex(fbfr,save);
インデックスは、次の文を使用して受信側で再生成できます。
Findex(fbfr);
インデックスの削除は受信側のプロセス以外で行われ、さらにファイルで送信されなかったため、受信側のプロセスは Frstrindex を呼び出せません。
注記 Funindex を呼び出しても、インデックスが占有していたメモリ領域は解放されません。Funindex は、ディスク上の領域を節約したり、バッファを別プロセスに送信するときに領域を節約するだけです。フィールド化バッファとインデックスを別プロセスに送信し、これらの関数を使用しないこともできます。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|