Asakusa FrameworkのOperator DSLの複製演算子のメモ。
|
複製演算子は、1つのレコードを(同じ内容を)複数ポートに出力する演算子。
性能特性はExtract(旧ドキュメントではMap)。[/2016-02-11]
入力 ポート数 |
入力データモデル の制約 |
イメージ | 出力 ポート数 |
出力データモデル の制約 |
入力1レコード に対する 出力レコード数 |
---|---|---|---|---|---|
1 |
![]() |
任意 | inと同じ データモデル |
1レコード。 (どのポートも 1レコードずつ 出力される) |
ただし、1つのポートから出たデータをそのまま他の複数の(別々の)演算子の入力ポートに接続することが出来るので、
実は複製演算子には専用の記述方法は存在しない。(専用のメソッドは用意されていない)
したがって、図としては以下の方が実態に近い。
演算子の出力を3つの演算子に(複製して)接続する例。
(この図はToad Editorを用いて作っています)
hoge = { 〜 };
import com.example.modelgen.dmdl.model.Hoge; import com.example.operator.ExampleOperatorFactory; import com.example.operator.ExampleOperatorFactory.Update1; import com.example.operator.ExampleOperatorFactory.Update2; import com.example.operator.ExampleOperatorFactory.Update3; import com.example.operator.ExampleOperatorFactory.Update4;
private final In<Hoge> in; private final Out<Hoge> out1; private final Out<Hoge> out2; private final Out<Hoge> out3;
@Override public void describe() { ExampleOperatorFactory operators = new ExampleOperatorFactory(); Update1 update1 = operators.update1(this.in); Update2 update2 = operators.update2(update1.out); Update3 update3 = operators.update3(update1.out); Update4 update4 = operators.update4(update1.out); this.out1.add(update2.out); this.out2.add(update3.out); this.out3.add(update4.out); }
この例では、更新演算子の出力「update1.out
」を3箇所で入力として使っている。これが「複製されている」という位置づけ。