Mercurial > hg > Members > tatsuki > Alice
annotate src/alice/codesegment/InputDataSegment.java @ 209:96110f25adcc working
add new flip API
author | sugi |
---|---|
date | Tue, 26 Mar 2013 17:10:38 +0900 |
parents | 28469b1671e7 |
children | b5daccf36104 |
rev | line source |
---|---|
3 | 1 package alice.codesegment; |
2 | |
3 import java.util.concurrent.atomic.AtomicInteger; | |
4 | |
202 | 5 import alice.datasegment.Command; |
32
2bfb796b0fa1
change method to create DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
28
diff
changeset
|
6 import alice.datasegment.CommandType; |
3 | 7 import alice.datasegment.DataSegment; |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
8 import alice.datasegment.Receiver; |
3 | 9 |
57 | 10 /** |
11 * InputDataSegment Manager | |
12 * keep tracking unbound/bound count | |
13 * @author kazz | |
14 * | |
15 */ | |
3 | 16 public class InputDataSegment { |
17 | |
119 | 18 public CodeSegment cs; |
57 | 19 private AtomicInteger count = new AtomicInteger(1); // 1 for no input data segments |
20 private AtomicInteger keyCount = new AtomicInteger(0); // number of DataSegments | |
3 | 21 |
22 public InputDataSegment(CodeSegment cs) { | |
23 this.cs = cs; | |
24 } | |
25 | |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
26 public void peek(Receiver receiver, String managerKey, String key) { |
18 | 27 peek(receiver, managerKey, key, 0); |
3 | 28 } |
29 | |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
30 public void peek(Receiver receiver, String managerKey, String key, int index) { |
18 | 31 DataSegment.get(managerKey).peek(receiver, key, index, cs); |
3 | 32 } |
33 | |
65 | 34 public void peek(Receiver receiver, String key) { |
35 peek(receiver, key, 0); | |
36 } | |
37 | |
38 public void peek(Receiver receiver, String key, int index) { | |
39 DataSegment.getLocal().peek(receiver, key, index, cs); | |
40 } | |
41 | |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
42 public void take(Receiver receiver, String managerKey, String key) { |
18 | 43 take(receiver, managerKey, key, 0); |
3 | 44 } |
45 | |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
46 public void take(Receiver receiver, String managerKey, String key, int index) { |
18 | 47 DataSegment.get(managerKey).take(receiver, key, index, cs); |
3 | 48 } |
7 | 49 |
65 | 50 public void take(Receiver receiver, String key) { |
51 take(receiver, key, 0); | |
52 } | |
53 | |
54 public void take(Receiver receiver, String key, int index) { | |
55 DataSegment.getLocal().take(receiver, key, index, cs); | |
56 } | |
198 | 57 |
205 | 58 public void flip(Command cmd) { |
202 | 59 DataSegment.getLocal().flip(cmd); |
198 | 60 } |
65 | 61 |
209 | 62 public void reply(Receiver receiver, Command reply) { |
63 receiver.index = reply.index; | |
64 receiver.val = reply.val; | |
65 receiver.from = reply.reverseKey; | |
66 receiver.obj = reply.obj; | |
205 | 67 receiver.setCommand(reply); |
19 | 68 receive(); |
69 } | |
70 | |
71 public void regist() { | |
72 count.getAndIncrement(); | |
73 keyCount.getAndIncrement(); | |
9 | 74 } |
75 | |
19 | 76 public void setKey() { |
77 if (keyCount.decrementAndGet() == 0) { | |
78 receive(); | |
79 } | |
80 } | |
81 | |
82 public void receive() { | |
8 | 83 if (count.decrementAndGet() == 0) { |
57 | 84 CodeSegmentManager.submit(cs); |
8 | 85 } |
86 } | |
32
2bfb796b0fa1
change method to create DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
28
diff
changeset
|
87 |
57 | 88 /** |
89 * InputDataSegment factory | |
90 * @param type PEEK or TAKE | |
91 * @return Receiver of DataSegment reply | |
92 */ | |
33
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
93 public Receiver create(CommandType type) { |
20c67f673224
change name of DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
32
diff
changeset
|
94 return new Receiver(this, type); |
32
2bfb796b0fa1
change method to create DataSegmentReceiver
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
28
diff
changeset
|
95 } |
3 | 96 } |