# HG changeset patch # User Nobuyasu Oshiro # Date 1390997496 -32400 # Node ID 34ac359f20f1a4a801a2f659fec3882b8fcda5c6 # Parent 585196deaacecd5859bc33b1d47aa6f51125631e Writed programming using Alice diff -r 585196deaace -r 34ac359f20f1 paper/chapter3.tex --- a/paper/chapter3.tex Wed Jan 29 18:41:30 2014 +0900 +++ b/paper/chapter3.tex Wed Jan 29 21:11:36 2014 +0900 @@ -102,8 +102,7 @@ 以下のコードにCodeSegmentの例を示す. \begin{lstlisting}[frame=lrbt,label=src:syslog_nfconntrack,caption=CodeSegmentの実行,numbers=left] public class TestCodeSegment extends CodeSegment { - // DataSegment - public Receiver ds = ids.create(CommandType.TAKE); + public Receiver arg1 = ids.create(CommandType.TAKE); public TestCodeSegment() { } @@ -120,17 +119,26 @@ public static void main(String[] args) { CodeSegment cs = new TestCodeSegment(); - cs.ds.setKey("local", "count"); + cs.arg1.setKey("local", "count"); // setKey API cs.ods.update("local", "count", 0); } } \end{lstlisting} -このプログラムは, 数字を1から10まで出力を行い終了する. +これは, 数字を1から10まで出力を行い終了するプログラムである. コードの説明を行う. まずTestCodeSegmentというCodeSegmentのインスタンスcsを生成する. -csにはdsというReceiverクラスのフィールドを保持している. -このdsがDataSegmentになる. -次に\verb|ds.setKey| +csはarg1というReceiverクラスのフィールドを保持しており, Receiverクラスは +DataSegmentを受けとるためのクラスである. +arg1に対しsetKey APIを使うことで, 使用したいDataSegmentのキー"count"を登録することができる. +これによりキー"count"に対してデータが登録された場合, そのデータを受け取りcsの計算が自動で始まる. +データの登録は\verb|ods.update|により行える. +上記のコード20行目ではupdateにより"count"をキーとして数値の0を登録している. +updateがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる. + +updateによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる. +8行目から14行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし +最後には\verb|ods.update|を行っている. +新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がupdateされることで実行される. % Alice の他サーバノードへの"log"のputの問題 diff -r 585196deaace -r 34ac359f20f1 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed