diff src/alice/codesegment/InputDataSegment.java @ 19:e7867328a2fb

change execute() API
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Sun, 15 Jan 2012 17:57:05 +0900
parents 72dd27d952b0
children 98ab26e09a98
line wrap: on
line diff
--- a/src/alice/codesegment/InputDataSegment.java	Sun Jan 15 16:03:11 2012 +0900
+++ b/src/alice/codesegment/InputDataSegment.java	Sun Jan 15 17:57:05 2012 +0900
@@ -9,7 +9,8 @@
 public class InputDataSegment {
 	
 	private CodeSegment cs;
-	private AtomicInteger count = new AtomicInteger(1); // for execute()
+	private AtomicInteger count = new AtomicInteger(1); // for no input data segments
+	private AtomicInteger keyCount = new AtomicInteger(0); 
 	
 	public InputDataSegment(CodeSegment cs) {
 		this.cs = cs;
@@ -21,7 +22,6 @@
 	
 	public void peek(DataSegmentReceiver receiver, String managerKey, String key, int index) {
 		DataSegment.get(managerKey).peek(receiver, key, index, cs);
-		count.getAndIncrement();
 	}
 
 	public void take(DataSegmentReceiver receiver, String managerKey, String key) {
@@ -30,16 +30,26 @@
 	
 	public void take(DataSegmentReceiver receiver, String managerKey, String key, int index) {
 		DataSegment.get(managerKey).take(receiver, key, index, cs);
-		count.getAndIncrement();
 	}
 
 	public void reply(DataSegmentReceiver receiver, DataSegmentValue val) {
 		receiver.index = val.index;
 		receiver.val = val.val;
-		execute();
+		receive();
+	}
+
+	public void regist() {
+		count.getAndIncrement();
+		keyCount.getAndIncrement();
 	}
 	
-	public void execute() {
+	public void setKey() {
+		if (keyCount.decrementAndGet() == 0) {
+			receive();
+		}
+	}
+	
+	public void receive() {
 		if (count.decrementAndGet() == 0) {
 			try {
 				CodeSegmentManager.get().readyQueue.put(cs);