annotate src/main/java/alice/codesegment/InputDataSegment.java @ 455:b004f62b83e5 dispose

refactor (remove quick method from DataSegmentManager and use flag)
author sugi
date Sun, 02 Nov 2014 18:07:43 +0900
parents f68d103498e0
children bcf6f4a6fcd0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.codesegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
3 import java.util.concurrent.atomic.AtomicInteger;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import alice.datasegment.Command;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
6 import alice.datasegment.CommandType;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7 import alice.datasegment.DataSegment;
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 417
diff changeset
8 import alice.datasegment.ReceiveData;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
9 import alice.datasegment.Receiver;
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
10 import alice.datasegment.SendOption;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
11
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12 /**
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 * InputDataSegment Manager
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14 * keep tracking unbound/bound count
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 * @author kazz
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
16 *
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
17 */
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
18 public class InputDataSegment {
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
19
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
20 public CodeSegment cs;
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
21 private AtomicInteger count = new AtomicInteger(1); // 1 for no input data segments
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
22 private AtomicInteger keyCount = new AtomicInteger(0); // number of DataSegments
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
23 public InputDataSegment(CodeSegment cs) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
24 this.cs = cs;
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
25 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
26
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
27 public void init(){
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
28 count = new AtomicInteger(1);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
29 keyCount = new AtomicInteger(0);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
30 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
31
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
32 public void quickPeek(Receiver receiver) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
33 cs.list.add(receiver);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
34 if (receiver.managerKey==null){
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
35 DataSegment.getLocal().peek(receiver, cs, null);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
36 } else {
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
37 SendOption option = new SendOption(true, false);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
38 DataSegment.get(receiver.managerKey).peek(receiver, cs, option);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
39 }
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
40 }
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
41
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
42
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
43 public void peek(Receiver receiver) {
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
44 cs.list.add(receiver);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
45 if (receiver.managerKey==null){
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
46 DataSegment.getLocal().peek(receiver, cs, null);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
47 } else {
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
48 SendOption option = new SendOption(false, false);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
49 DataSegment.get(receiver.managerKey).peek(receiver, cs, option);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
50 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
51 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
52
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
53 public void quickTake(Receiver receiver) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
54 cs.list.add(receiver);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
55 if (receiver.managerKey==null){
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
56 DataSegment.getLocal().take(receiver, cs, null);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
57 } else {
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
58 SendOption option = new SendOption(true, false);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
59 DataSegment.get(receiver.managerKey).take(receiver, cs, option);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
60 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
61 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
62
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
63 public void take(Receiver receiver) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
64 cs.list.add(receiver);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
65 if (receiver.managerKey==null){
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
66 DataSegment.getLocal().take(receiver, cs, null);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
67 } else {
455
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
68 SendOption option = new SendOption(false, false);
b004f62b83e5 refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents: 452
diff changeset
69 DataSegment.get(receiver.managerKey).take(receiver, cs, option);
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
70 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
71 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
72
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
73 public void reply(Receiver receiver, Command reply) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
74 receiver.index = reply.index;
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 417
diff changeset
75 receiver.from = reply.reverseKey;
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 417
diff changeset
76 receiver.setData(new ReceiveData(reply.val, reply.getCompressFlag(), reply.getSerializeFlag()));
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
77 receive();
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
78 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
79
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
80 public void register() {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
81 count.getAndIncrement();
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
82 keyCount.getAndIncrement();
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
83 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
84
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
85 public void setKey() {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
86 if (keyCount.decrementAndGet() == 0) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
87 receive();
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
88 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
89 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
90
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
91 public void receive() {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
92 if (count.decrementAndGet() == 0) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
93 CodeSegmentManager.submit(cs);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
94 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
95 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
96
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
97 /**
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
98 * InputDataSegment factory
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
99 * @param type PEEK or TAKE
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
100 * @return Receiver of DataSegment reply
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
101 */
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
102 public Receiver create(CommandType type) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
103 return new Receiver(this, type);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
104 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
105
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
106 public void recommand(Receiver receiver) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
107 // TODO why only local?
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
108 DataSegment.getLocal().recommand(receiver, cs);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
109 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
110
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
111 public void setCounter(int cnt){
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
112 count.set(cnt);
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
113 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
114 }