changeset 26:80023cb92594 draft

add some CodeSegment. ForkStateTake, CheckForkOwnerCodeSegment, TakeForkManager
author one
date Tue, 11 Dec 2012 16:07:41 +0900
parents edd9ced13896
children 52e9b33f8a99
files src/alice/test/dpp/codesegment/fork/ForkStateTakeCodeSegment.java src/alice/test/dpp/codesegment/philosophy/CheckForkOwnerCodeSegment.java src/alice/test/dpp/codesegment/philosophy/TakeForkManagerCodeSegment.java src/alice/test/dpp/datasegment/Fork.java src/alice/test/dpp/datasegment/Philosophy.java
diffstat 5 files changed, 113 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/dpp/codesegment/fork/ForkStateTakeCodeSegment.java	Tue Dec 11 16:07:41 2012 +0900
@@ -0,0 +1,29 @@
+package alice.test.dpp.codesegment.fork;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.test.dpp.codesegment.philosophy.CheckForkOwnerCodeSegment;
+import alice.test.dpp.datasegment.Fork;
+import alice.test.dpp.datasegment.Philosophy;
+
+public class ForkStateTakeCodeSegment extends CodeSegment {
+
+	Receiver arg1 = ids.create(CommandType.TAKE);
+	Receiver arg2 = ids.create(CommandType.TAKE);
+
+	public ForkStateTakeCodeSegment(String pName, String forkName) {
+		arg1.setKey(pName);
+		arg2.setKey(forkName);
+	}
+	
+	@Override
+	public void run() {
+		Philosophy phil = arg1.asClass(Philosophy.class);
+		Fork fork = arg2.asClass(Fork.class);
+		fork.takeFork(phil.getName());
+		new CheckForkOwnerCodeSegment(phil.getName(), fork.getForkName());
+		ods.update("local", phil.getName(), phil);
+		ods.update("local", fork.getForkName(), fork);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/dpp/codesegment/philosophy/CheckForkOwnerCodeSegment.java	Tue Dec 11 16:07:41 2012 +0900
@@ -0,0 +1,31 @@
+package alice.test.dpp.codesegment.philosophy;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.test.dpp.datasegment.Fork;
+import alice.test.dpp.datasegment.Philosophy;
+
+public class CheckForkOwnerCodeSegment extends CodeSegment {
+
+	Receiver arg1 = ids.create(CommandType.TAKE);
+	Receiver arg2 = ids.create(CommandType.TAKE);
+	
+	public CheckForkOwnerCodeSegment(String pName, String forkName) {
+		arg1.setKey(pName);
+		arg2.setKey(forkName);
+	}
+	
+	@Override
+	public void run() {
+		Philosophy phil = arg1.asClass(Philosophy.class);
+		Fork fork = arg2.asClass(Fork.class);
+		if (fork.ownerEquals(phil.getName())) {
+			phil.checkForkFlag(fork.getForkName());
+		}
+		new TakeForkManagerCodeSegment(phil.getName());
+		ods.update("local", phil.getName(), phil);
+		ods.update("local", fork.getForkName(), fork);
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/dpp/codesegment/philosophy/TakeForkManagerCodeSegment.java	Tue Dec 11 16:07:41 2012 +0900
@@ -0,0 +1,31 @@
+package alice.test.dpp.codesegment.philosophy;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.test.dpp.datasegment.Philosophy;
+
+public class TakeForkManagerCodeSegment extends CodeSegment {
+	
+	Receiver arg1 = ids.create(CommandType.TAKE);
+	
+	public TakeForkManagerCodeSegment(String pName) {
+		arg1.setKey(pName);
+	}
+	
+	@Override
+	public void run() {
+		Philosophy phil = arg1.asClass(Philosophy.class);
+		if (phil.hasLeftFork && phil.hasRightFork) { 
+			phil.setState(Philosophy.State.EAT);
+			new EatCodeSegment(phil.getName());
+		} else if (phil.hasLeftFork) {
+			phil.setState(Philosophy.State.TAKELEFTFORK);
+			new TakeLeftForkCodeSegment(phil.getName(), phil.getLeftFork());
+		} else {
+			phil.setState(Philosophy.State.TAKERIGHTFORK);
+			new TakeRightForkCodeSegment(phil.getName(), phil.getRightFork());
+		}
+		ods.update("local", phil.getName(), phil);		
+	}
+}
--- a/src/alice/test/dpp/datasegment/Fork.java	Mon Dec 10 00:47:57 2012 +0900
+++ b/src/alice/test/dpp/datasegment/Fork.java	Tue Dec 11 16:07:41 2012 +0900
@@ -55,6 +55,10 @@
 		}
 	}
 	
+	public boolean ownerEquals(String s) {
+		return owner.equals(s);
+	}
+	
 	public String getOwner() {
 		return owner;
 	}
--- a/src/alice/test/dpp/datasegment/Philosophy.java	Mon Dec 10 00:47:57 2012 +0900
+++ b/src/alice/test/dpp/datasegment/Philosophy.java	Tue Dec 11 16:07:41 2012 +0900
@@ -24,7 +24,8 @@
 
 	private String name, leftFork, rightFork;
 	private State state;
-	
+	public boolean hasRightFork = false;
+	public boolean hasLeftFork = false;
 	
 	public Philosophy() {}
 	
@@ -60,5 +61,20 @@
 	public String getRightFork() {
 		return rightFork;
 	}
-
+	
+	public void resetHasForkFlag() {
+		hasRightFork = false;
+		hasLeftFork = false;
+	}
+	
+ 	public void checkForkFlag(String fork) {
+		if (rightFork.equals(fork)) {
+			hasRightFork = true;
+		} else if (leftFork.equals(fork)) {
+			hasLeftFork = true;
+		} else {}
+	}
+ 	
+ 	
+ 	
 }