next up previous contents index
Next: コンシューマ外部参照オブジェクトの詳細 Up: 分散処理用ジェネリック・オブジェクトの詳細 Previous: 分散処理用ジェネリック・オブジェクトの詳細

ジェネレータ外部参照オブジェクトの詳細

   

このオブジェクトの保持するデータとメソッドの処理内容を以下に示す。 exref classとして、runtime/ge_exref.cで定義されている。

1.
保持するデータ

(輸出元)ノード番号、輸出表エントリのID、重み(WEC)。

より詳細には、runtime/include/klic/ge_exref.hに以下のように定義されている。

struct exref_object{
  struct generator_object_method_table *method_table;
  long node;         /* ノード番号 */
  long index;        /* 輸出表エントリ */
  long wec;          /* 重み */
  q    to_exref;     /* generator二重ループの入口 */
  long gc_flag;      /* GCメソッドがよびだされたかどうかのフラグ */
};

2.
デレファレンスメソッド (引数:なし)

返信先を用意して%readを送信しコンシューマ外部参照オブジェクトを作成する。   コンシューマ外部参照オブジェクトの作成時に与える引数群のうち、 ノード番号、輸出表エントリのID 及び WEC は、 自分が保持しているデータをそのまま渡す。 作成したオブジェクトへのポインタをデレファレンスメソッドの返り値とする。

3.
active unifyメソッド (引数:『対象データ』)

(メソッドの引数の)『対象データ』に従って以下のいずれかの処理を行う。

『対象データ』が具体値
自分に具体値を書込み、 以下のメッセージを自分が指していたノードへ送る。
%unify(Tn=初期値,自分の参照先,具体値)

『対象データ』がコンシューマ・オブジェクト
自分のデレファレンスメソッドを呼出し、 その返り値と『対象データ』の具体化を行う。

『対象データ』がジェネレータ外部参照オブジェクト
『 対象データ 』 を指すポインタを自分に書込み、 以下のメッセージを自分が指していたノードへ送る。
%unify(Tn=初期値,自分の参照先,『対象データ』)

『対象データ』が (ジェネレータ外部参照オブジェクト以外の) ジェネレータ・オブジェクト
『対象データ』のデレファレンスメソッドを呼出し、 その返り値と自分の具体化を行う。

4.
%read受信メソッド (引数:%readの引数群)

%readの転送上限引数Tnの値に従い 以下のいずれかの処理を行う。

Tn>1
自分が指すノードへ以下のメッセージを送信する。
%read(Tn-1,自分の参照先,(前のままの)返信先)
Tn=1
リプライ・コンシューマ・オブジェクトを作成し、 自分のデレファレンスメソッドを呼出す。 そしてデレファレンスメソッド呼出しの返り値と、 作成したリプライ・コンシューマ・オブジェクトとのボディユニフィケーションを行う。



Sekita Daigo
1998-05-18