Skip to content
Snippets Groups Projects
Commit 2f4196e2 authored by Peter Wagenhuber's avatar Peter Wagenhuber
Browse files

grad am umbau richtung table. beim durcharbeiten des tables wird noch nicht...

grad am umbau richtung table. beim durcharbeiten des tables wird noch nicht richtig af den vorangegangenen eintrag zurueckgegriffen.
parent c87fe7f2
Branches
No related tags found
No related merge requests found
No preview for this file type
File added
No preview for this file type
No preview for this file type
......@@ -5,12 +5,13 @@ public class BFTableEntry {
private int minTimediff, maxTimediff;
private int noOfDroplets;
private int bfPathPriority;
private int bfMinSteps;
public BFTableEntry(int bfPathPriority, int noOfDroplets, int minTimediff,
int maxTimediff) {
this.minTimediff = minTimediff;
this.maxTimediff = maxTimediff;
this.noOfDroplets = noOfDroplets;
public BFTableEntry(int bfPathPriority, int bfMinSteps) {
this.minTimediff = Nloc.MIN_TIMEDIFF;
this.maxTimediff = Nloc.MIN_TIMEDIFF + 2;
this.noOfDroplets = 1;
this.bfMinSteps = bfMinSteps;
this.bfPathPriority = bfPathPriority;
}
......@@ -30,6 +31,10 @@ public class BFTableEntry {
return bfPathPriority;
}
public int getBfMinSteps() {
return bfMinSteps;
}
public void setMinTimediff(int minTimediff) {
this.minTimediff = minTimediff;
}
......@@ -45,4 +50,8 @@ public class BFTableEntry {
public void setBfPathPriority(int bfPathPriority) {
this.bfPathPriority = bfPathPriority;
}
public void setBfMinSteps(int bfMinSteps) {
this.bfMinSteps = bfMinSteps;
}
}
......@@ -55,8 +55,10 @@ public class Nloc {
}
}
public Pump generateDropletSequence(List<String> modules)
throws BifurcationTooShortException {
//public Pump generateDropletSequence(List<String> modules)
// throws BifurcationTooShortException {
public List<BFTableEntry> generateDropletSequence(List<String> modules) {
Pump pump = this.getPump();
......@@ -66,19 +68,117 @@ public class Nloc {
List<List<Channel>> pathlist = this.getAllPaths();
List<Channel> desiredPath = getDesiredPath(modPath, pathlist);
int noOfDroplets = this.getNumberOfDroplets(desiredPath);
pump.setSteps(noOfDroplets + (noOfDroplets - 1) * timediff);
List<BFTableEntry> startConfigruation = calcBFTable(desiredPath);
//cumulatedDropletTimeDiffList = calcCumTDiffList(timediffList);
//dropletList = generateDropletList(noOfDroplets);
for (int i = 0; i < noOfDroplets; i++){
if (!pump.containsDroplets()) {
dropletList.add(new Droplet(DropletType.PAYLOAD,
new Position(pump,1)));
//pump = generateSequenceAsPump(dropletList, cumulatedDropletTimeDiffList);
//for (int i = 0; i < noOfDroplets; i++){
// if (!pump.containsDroplets()) {
// dropletList.add(new Droplet(DropletType.PAYLOAD,
// new Position(pump,1)));
// } else {
// dropletList.add(new Droplet(DropletType.HEADER,
// new Position(pump,i + i * timediff + 1)));
// }
//}
return startConfigruation;
}
private List<BFTableEntry> calcBFTable(List<Channel> path) {
// initialize table
List<BFTableEntry> bftable = new ArrayList<BFTableEntry>();
ListIterator<Channel> iter = path.listIterator();
while(iter.hasNext()) {
Channel current = iter.next();
if (current.isBifurcation()) {
Channel following = iter.next();
int prio = current.getChildrenList().indexOf(following) + 1;
int bfMinSteps = current.getChildrenList().get(0).getHSteps();
bftable.add(new BFTableEntry(prio, bfMinSteps));
iter.previous();
}
} // end while table init
/* calculate noOfDroplets and timediff range traversing the table from
* "end" to "start"
*/
for (int listPos = bftable.size(); listPos > 0; listPos--) {
System.out.println("listpos: " + listPos + " Size: " + bftable.size());
BFTableEntry cur = bftable.get(listPos - 1);
BFTableEntry prev = null;
if (listPos != bftable.size()) {
prev = bftable.get(listPos);
}
if (cur.getBfPathPriority() == 2) {
if (prev != null) {
cur.setNoOfDroplets(prev.getNoOfDroplets() * 2);
cur.setMaxTimediff(cur.getBfMinSteps());
cur.setMinTimediff(prev.getMinTimediff());
} else {
cur.setNoOfDroplets(2);
cur.setMaxTimediff(cur.getBfMinSteps());
}
}
if (cur.getBfPathPriority() == 1 && prev != null) {
//TODO:
//checkTableDown()
//if violation
// mindist = previous.getMaxTimediff();
// maxdist = current.getMinTimediff();
// noOfDroplets = noOfDroplets * 2 -1;
//if noviolation
// mindist = current.getMinTimediff();
// maxidst = previous.getMaxTimediff();
} else {
dropletList.add(new Droplet(DropletType.HEADER,
new Position(pump,i + i * timediff + 1)));
// throw some exception
}
}
return pump;
return bftable;
//ListIterator<BFTableEntry> bftiter = bftable.listIterator(bftable.size());
//int noOfDroplets = 1;
//while(bftiter.hasPrevious()) {
// // get number of droplets from the following table entry
// // (next in this case because of the reverse processing of the list)
// if (bftable.size() != bftable.indexOf(current) + 1) {
// BFTableEntry following = bftiter.next();
// noOfDroplets = following.getNoOfDroplets();
// bftiter.previous();
// }
// BFTableEntry current = bftiter.previous();
// int prio = current.getBfPathPriority();
// int minSteps = current.getBfMinSteps();
// int minTimediff = current.getMinTimediff();
// int maxTimediff = current.getMaxTimediff();
// if (prio == 2) {
// current.setNoOfDroplets(noOfDroplets * 2);
// current.setMaxTimediff(minSteps);
// } else if (prio == 1) {
// //TODO:
// //checkTableDown()
// //if violation
// // mindist = previous.getMaxTimediff();
// // maxdist = current.getMinTimediff();
// // noOfDroplets = noOfDroplets * 2 -1;
// //if noviolation
// // mindist = current.getMinTimediff();
// // maxidst = previous.getMaxTimediff();
// } else {
// // throw some exception
// }
//}
//return bftable.get(0);
}
public boolean allDropletsInSink() {
......@@ -89,32 +189,32 @@ public class Nloc {
return allInSink;
}
public int getNumberOfDroplets(List<Channel> desiredPath)
throws BifurcationTooShortException {
//public int getNumberOfDroplets(List<Channel> desiredPath)
// throws BifurcationTooShortException {
int numOfDroplets = 1;
ListIterator<Channel> iter = desiredPath.listIterator();
while(iter.hasNext()) {
Channel current = iter.next();
if (current.isBifurcation()) {
Channel following = iter.next();
int neededMinLength = numOfDroplets * Nloc.MIN_TIMEDIFF +
numOfDroplets - 1;
int prio = current.getChildrenList().indexOf(following) + 1;
iter.previous();
// int numOfDroplets = 1;
// ListIterator<Channel> iter = desiredPath.listIterator();
// while(iter.hasNext()) {
// Channel current = iter.next();
// if (current.isBifurcation()) {
// Channel following = iter.next();
// int neededMinLength = numOfDroplets * Nloc.MIN_TIMEDIFF +
// numOfDroplets - 1;
// int prio = current.getChildrenList().indexOf(following) + 1;
// iter.previous();
for (int i = 1; i < prio; i++) {
// for (int i = 1; i < prio; i++) {
int bifurcChildHSteps = current.getChildrenList().get(i).getHSteps();
if (bifurcChildHSteps < neededMinLength) {
throw new BifurcationTooShortException(current, neededMinLength);
}
}
numOfDroplets *= (current.getChildrenList().indexOf(following) + 1);
}
}
return numOfDroplets;
}
// int bifurcChildHSteps = current.getChildrenList().get(i).getHSteps();
// if (bifurcChildHSteps < neededMinLength) {
// throw new BifurcationTooShortException(current, neededMinLength);
// }
// }
// numOfDroplets *= (current.getChildrenList().indexOf(following) + 1);
// }
// }
// return numOfDroplets;
//}
public List<Channel> getDesiredPath(List<Channel> modules,
List<List<Channel>> pathlist) {
......
......@@ -11,23 +11,35 @@ public class TestNloc {
public static void main(String[] args) {
Nloc nloc0 = new Nloc(getNloc0());
Nloc nloc1 = new Nloc(getNloc1());
Nloc nloc2 = new Nloc(getNloc2());
Nloc nloc3 = new Nloc(getNloc3());
Nloc nloc4 = new Nloc(getNloc4());
Pump pump;
try {
pump = nloc2.generateDropletSequence(Arrays.asList("m1","m2"));
List<Droplet> drList = pump.getDropletList();
System.out.println("Number of Droplets needed: " + drList.size());
if (nloc2.simulate()) {
System.out.println("The sequence is good");
} else {
System.out.println("The sequence sucks");
}
} catch (BifurcationTooShortException e) {
System.out.println(e.toString());
List<BFTableEntry> bftable = nloc4.generateDropletSequence(Arrays.asList("m0","m2","m5"));
for (BFTableEntry bftentry: bftable) {
System.out.print("Prio: " + bftentry.getBfPathPriority());
System.out.print(" MinSteps: " + bftentry.getBfMinSteps());
System.out.print(" NoOfDroplets: " + bftentry.getNoOfDroplets());
System.out.print(" MinTimediff: " + bftentry.getMinTimediff());
System.out.println(" MaxTimediff: " + bftentry.getMaxTimediff());
}
//Pump pump;
//try {
// pump = nloc2.generateDropletSequence(Arrays.asList("m1","m2"));
// List<Droplet> drList = pump.getDropletList();
// System.out.println("Number of Droplets needed: " + drList.size());
// if (nloc2.simulate()) {
// System.out.println("The sequence is good");
// } else {
// System.out.println("The sequence sucks");
// }
//} catch (BifurcationTooShortException e) {
// System.out.println(e.toString());
//}
......@@ -85,6 +97,80 @@ public class TestNloc {
return chanlist;
}
public static List<Channel> getNloc1() {
Channel chan0 = new Channel("ch0",8,8);
Channel chan1 = new Channel("ch1",8,8);
Channel chan2 = new Channel("ch2",11,12);
Channel chan3 = new Channel("ch3",19,21);
Channel chan4 = new Channel("ch4",35,39);
Channel chan5 = new Channel("ch5",10,11);
Channel chan6 = new Channel("ch6",10,11);
Channel chan7 = new Channel("ch7",12,13);
Channel chan8 = new Channel("ch8",10,11);
Channel chan9 = new Channel("ch9",10,11);
Channel chan10 = new Channel("ch10",25,27);
Channel chan11 = new Channel("ch11",10,11);
Channel chan12 = new Channel("ch12",12,13);
Channel chan13 = new Channel("ch13",13,14);
Channel chan14 = new Channel("ch14",8,8);
Channel chan15 = new Channel("ch15",8,8);
Channel chan16 = new Channel("ch16",8,8);
Channel chan17 = new Channel("ch17",8,8);
Channel chan18 = new Channel("ch18",20,21);
Channel chan19 = new Channel("ch19",20,21);
Channel chan20 = new Channel("ch20",99,108);
Module m0 = new Module("m0", 12,10);
Module m1 = new Module("m1", 10,10);
Module m2 = new Module("m2", 12,10);
Module m3 = new Module("m3", 10,10);
Module m4 = new Module("m4", 10,10);
Pump p0 = new Pump();
Sink s0 = new Sink();
List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
chan5, chan6, chan7, chan8, chan9, chan10, chan11, chan12, chan13,
chan14, chan15, chan16, chan17, chan18, chan19, chan20, m0, m1, m2,
m3, m4, p0, s0);
p0.addChild(chan0);
chan0.addChild(chan1);
chan0.addChild(chan2);
chan1.addChild(chan3);
chan3.addChild(m0);
m0.addChild(chan4);
chan4.addChild(chan20);
chan20.addChild(s0);
chan2.addChild(chan5);
chan5.addChild(chan6);
chan5.addChild(chan7);
chan6.addChild(chan8);
chan8.addChild(m1);
m1.addChild(chan10);
chan10.addChild(chan19);
chan19.addChild(chan20);
chan7.addChild(chan9);
chan9.addChild(m2);
m2.addChild(chan11);
chan11.addChild(chan12);
chan11.addChild(chan13);
chan12.addChild(chan14);
chan14.addChild(m3);
m3.addChild(chan16);
chan16.addChild(chan18);
chan18.addChild(chan19);
chan13.addChild(chan15);
chan15.addChild(m4);
m4.addChild(chan17);
chan17.addChild(chan18);
return chanlist;
}
public static List<Channel> getNloc2() {
Channel chan0 = new Channel("ch0",8,8);
Channel chan1 = new Channel("ch1",10,11);
......@@ -194,4 +280,69 @@ public class TestNloc {
return chanlist;
}
public static List<Channel> getNloc4() {
Channel chan0 = new Channel("ch0",8,8);
Channel chan1 = new Channel("ch1",8,8);
Channel chan2 = new Channel("ch2",9,9);
Channel chan3 = new Channel("ch3",19,19);
Channel chan4 = new Channel("ch4",19,19);
Channel chan5 = new Channel("ch5",8,8);
Channel chan6 = new Channel("ch6",10,11);
Channel chan7 = new Channel("ch7",11,12);
Channel chan8 = new Channel("ch8",25,28);
Channel chan9 = new Channel("ch9",25,28);
Channel chan10 = new Channel("ch10",8,8);
Channel chan11 = new Channel("ch11",12,13);
Channel chan12 = new Channel("ch12",13,14);
Channel chan13 = new Channel("ch13",25,28);
Channel chan14 = new Channel("ch14",25,28);
Channel chan15 = new Channel("ch15",99,108);
Module m0 = new Module("m0", 10,10);
Module m1 = new Module("m1", 10,10);
Module m2 = new Module("m2", 10,10);
Module m3 = new Module("m3", 10,10);
Module m4 = new Module("m4", 10,10);
Module m5 = new Module("m5", 10,10);
Pump p0 = new Pump();
Sink s0 = new Sink();
List<Channel> chanlist = Arrays.asList(chan0, chan1, chan2, chan3, chan4,
chan5, chan6, chan7, chan8, chan9, chan10, chan11, chan12, chan13,
chan14, chan15, m0, m1, m2, m3, p0, s0);
p0.addChild(chan0);
chan0.addChild(chan1);
chan0.addChild(chan2);
chan1.addChild(m0);
chan2.addChild(m1);
m0.addChild(chan3);
m1.addChild(chan4);
chan3.addChild(chan5);
chan4.addChild(chan5);
chan5.addChild(chan6);
chan5.addChild(chan7);
chan6.addChild(m2);
chan7.addChild(m3);
m2.addChild(chan8);
m3.addChild(chan9);
chan8.addChild(chan10);
chan9.addChild(chan10);
chan10.addChild(chan11);
chan10.addChild(chan12);
chan11.addChild(m4);
chan12.addChild(m5);
m4.addChild(chan13);
m5.addChild(chan14);
chan13.addChild(chan15);
chan14.addChild(chan15);
chan15.addChild(s0);
return chanlist;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment