# HG changeset patch # User one # Date 1355209661 -32400 # Node ID 80023cb92594ee26f154fae54ccb719ef1aad479 # Parent edd9ced13896a00688eb821c0a96bac8f037077d add some CodeSegment. ForkStateTake, CheckForkOwnerCodeSegment, TakeForkManager diff -r edd9ced13896 -r 80023cb92594 src/alice/test/dpp/codesegment/fork/ForkStateTakeCodeSegment.java --- /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); + } +} diff -r edd9ced13896 -r 80023cb92594 src/alice/test/dpp/codesegment/philosophy/CheckForkOwnerCodeSegment.java --- /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); + } + +} diff -r edd9ced13896 -r 80023cb92594 src/alice/test/dpp/codesegment/philosophy/TakeForkManagerCodeSegment.java --- /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); + } +} diff -r edd9ced13896 -r 80023cb92594 src/alice/test/dpp/datasegment/Fork.java --- 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; } diff -r edd9ced13896 -r 80023cb92594 src/alice/test/dpp/datasegment/Philosophy.java --- 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 {} + } + + + }