Commit 5c6776d9 authored by Peter Wagenhuber's avatar Peter Wagenhuber
Browse files

geht jetzt soweit mal. muss aber noch ein wenig die performance tunen

parent d530c512
......@@ -72,10 +72,13 @@ public class Droplet {
} else {
if (pSteps < hSteps && this.type == DropletType.HEADER) {
factor = (float)pSteps / hSteps;
normStep = (int)Math.ceil((this.position.getSteps() - 1) * factor);
} else if (pSteps > hSteps && this.type == DropletType.PAYLOAD) {
factor = (float)hSteps / pSteps;
}
normStep = (int)Math.ceil((this.position.getSteps() - 1) * factor);
normStep = (int)Math.ceil((this.position.getSteps() - 1) * factor);
} else {
normStep = this.position.getSteps();
}
}
return normStep;
}
......@@ -99,6 +102,7 @@ public class Droplet {
if (drlist.indexOf(this) + 1 == drlist.size()) {
List<Channel> childChanList =
this.position.getChannel().getChildrenList();
int minChanTs = this.position.getChannel().getMinSteps();
// Check if the following channel is a sink
......@@ -109,33 +113,31 @@ public class Droplet {
// HEADER Droplet and is in a Module (or the other way round)
// they don't coalesce
} else if (childChanList.size() == 1 &&
childChanList.get(0) instanceof Module) {
List<Droplet> followingDroplets =
childChanList.get(0).getNormalizedSortedDropletList();
if (!followingDroplets.isEmpty() &&
this.type != followingDroplets.get(0).getType()) {
coalesce = false;
}
childChanList.get(0) instanceof Module &&
!childChanList.get(0).getNormalizedSortedDropletList().isEmpty() &&
(this.type !=
childChanList.get(0).getNormalizedSortedDropletList().get(0).getType())) {
coalesce = false;
} else if (minChanTs - this.getNormalizedSteps() > Nloc.MIN_TIMEDIFF) {
// droplet is last in channel and remaining time in channel is
// greater than MIN_TIMEDIFF
coalesce = false;
} else {
// Next is no sink
// Next is no sink and no module with different type of droplet next
for (Channel chan : childChanList) {
List<Droplet> childDrList = chan.getNormalizedSortedDropletList();
if (!childDrList.isEmpty()) {
coalesce |= (this.position.getChannel().getMinSteps() +
childDrList.get(0).getNormalizedSteps() -
this.getNormalizedSteps()
) < Nloc.MIN_TIMEDIFF;
) <= Nloc.MIN_TIMEDIFF;
}
}
}
} else { // not last droplet in channel
Droplet followingDroplet = drlist.get(drlist.indexOf(this) + 1);
coalesce = (followingDroplet.getNormalizedSteps() -
this.getNormalizedSteps()) < Nloc.MIN_TIMEDIFF;
this.getNormalizedSteps()) <= Nloc.MIN_TIMEDIFF;
}
}
return coalesce;
......
......@@ -51,7 +51,8 @@ public class Nloc {
currentSeq = resetPayloadDropletPosition(currentSeq);
} while (!possibleSequences.isEmpty() &&
dropletSequence.size() != currentSeq.size());
dropletSequence.size() != currentSeq.size() &&
!sequenceFunctinal());
if (dropletSequence.size() != currentSeq.size()) {
pump = null;
......@@ -213,7 +214,7 @@ public class Nloc {
return pump;
}
public boolean simulate() {
public boolean sequenceFunctinal() {
this.dropletList = this.getPump().getDropletList();
boolean works = true;
while (!allDropletsInSink()) {
......
......@@ -11,29 +11,35 @@ public class TestNloc {
public static void main(String[] args) {
//Nloc nl = new Nloc(getNlocS5());
List<Channel> chList = getNlocSC();
List<Channel> chList = getNlocS5();
Nloc nl = new Nloc(chList);
Pump pump = nl.getPump();
pump.setSteps(3);
//Pump pump = nl.getPump();
//pump.setSteps(2);
//Channel c1 = new Channel("ch1", 3, 5);
//Channel c2 = new Channel("ch2", 5, 1);
Droplet pld = new Droplet(DropletType.PAYLOAD, new Position(pump,1));
pld.setName("p");
Droplet hdr = new Droplet(DropletType.HEADER, new Position(pump,3));
hdr.setName("h");
//Sink s0 = new Sink();
//Channel c2 = new Channel("ch2", 3, 5);
//Module m0 = new Module("m0", 5,1);
//c1.addChild(c2);
//Droplet pld = new Droplet(DropletType.PAYLOAD, new Position(pump,1));
//pld.setName("p");
//Droplet hdr = new Droplet(DropletType.HEADER, new Position(pump,2));
//hdr.setName("h");
//
//System.out.println(pld.coalesce());
//
//int normStep = hdr.getNormalizedSteps();
//System.out.println("Normalized Steps: " + normStep);
//nl.setDropletList(pump.getDropletList());
if (nl.simulate()) {
System.out.println("Success!! Don't coalesce");
} else {
System.out.println("Did coalesce!");
}
//if (nl.simulate()) {
// System.out.println("Success!! Don't coalesce");
//} else {
// System.out.println("Did coalesce!");
//}
//List<List<Channel>> allPaths = nl.getAllPaths();
List<List<Channel>> allPaths = nl.getAllPaths();
allPaths.remove(4);
//try {
// String[] mtv = {"f2", "m3", "h0", "m5"};
......@@ -48,19 +54,19 @@ public class TestNloc {
//}
//printPaths(allPaths);
//int count = 0;
//for (List<Channel> path: allPaths) {
int count = 0;
for (List<Channel> path: allPaths) {
// String[] modulesToVisit = extractModuleStringArrayFromPath(path);
String[] modulesToVisit = extractModuleStringArrayFromPath(path);
// System.out.println("Modules to visit: ");
// for (String str: modulesToVisit) {
// System.out.print(str + " " );
// }
// System.out.println("Pathnum: " + count++);
// Pump p = nl.getShortestSequence(modulesToVisit);
// printPumpcontents(p);
//}
System.out.println("Modules to visit: ");
for (String str: modulesToVisit) {
System.out.print(str + " " );
}
System.out.println("Pathnum: " + count++);
Pump p = nl.getShortestSequence(modulesToVisit);
printPumpcontents(p);
}
}
......@@ -1039,11 +1045,11 @@ public class TestNloc {
public static List<Channel> getNlocSC() {
// channel(name, psteps, hsteps)
Channel ch1 = new Channel("ch1",3,5);
Channel ch1 = new Channel("ch1",1,1);
Channel ch2 = new Channel("ch2",1,1);
Channel ch3 = new Channel("ch3",1,1);
Module m0 = new Module("m0", 2,1);
Module m0 = new Module("m0", 3,1);
Module m1 = new Module("m1", 1,3);
Pump p0 = new Pump();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment