diff options
Diffstat (limited to 'opendc-simulator/opendc-simulator-flow/src/main/java')
4 files changed, 36 insertions, 46 deletions
diff --git a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/Multiplexer.java b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/Multiplexer.java index 0af2499a..a87ded8d 100644 --- a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/Multiplexer.java +++ b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/Multiplexer.java @@ -34,26 +34,26 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer private ArrayList<FlowEdge> consumerEdges = new ArrayList<>(); private FlowEdge supplierEdge; - private ArrayList<Float> demands = new ArrayList<>(); // What is demanded by the consumers - private ArrayList<Float> supplies = new ArrayList<>(); // What is supplied to the consumers + private ArrayList<Double> demands = new ArrayList<>(); // What is demanded by the consumers + private ArrayList<Double> supplies = new ArrayList<>(); // What is supplied to the consumers - private float totalDemand; // The total demand of all the consumers - private float totalSupply; // The total supply from the supplier - private float capacity; // What is the max capacity + private double totalDemand; // The total demand of all the consumers + private double totalSupply; // The total supply from the supplier + private double capacity; // What is the max capacity public Multiplexer(FlowGraph graph) { super(graph); } - public float getTotalDemand() { + public double getTotalDemand() { return totalDemand; } - public float getTotalSupply() { + public double getTotalSupply() { return totalSupply; } - public float getCapacity() { + public double getCapacity() { return capacity; } @@ -67,7 +67,7 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer } } - float totalSupply = 0; + double totalSupply = 0; for (int i = 0; i < this.consumerEdges.size(); i++) { this.pushSupply(this.consumerEdges.get(i), this.supplies.get(i)); totalSupply += this.supplies.get(i); @@ -83,8 +83,8 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer return Long.MAX_VALUE; } - private static float redistributeSupply( - ArrayList<FlowEdge> consumerEdges, ArrayList<Float> supplies, float capacity) { + private static double redistributeSupply( + ArrayList<FlowEdge> consumerEdges, ArrayList<Double> supplies, double capacity) { final long[] consumers = new long[consumerEdges.size()]; for (int i = 0; i < consumers.length; i++) { @@ -94,24 +94,24 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer break; } - consumers[i] = ((long) Float.floatToRawIntBits(consumer.getDemand()) << 32) | (i & 0xFFFFFFFFL); + consumers[i] = (Double.doubleToRawLongBits(consumer.getDemand()) << 32) | (i & 0xFFFFFFFFL); } Arrays.sort(consumers); - float availableCapacity = capacity; + double availableCapacity = capacity; int inputSize = consumers.length; for (int i = 0; i < inputSize; i++) { long v = consumers[i]; int slot = (int) v; - float d = Float.intBitsToFloat((int) (v >> 32)); + double d = Double.longBitsToDouble((int) (v >> 32)); if (d == 0.0) { continue; } - float availableShare = availableCapacity / (inputSize - i); - float r = Math.min(d, availableShare); + double availableShare = availableCapacity / (inputSize - i); + double r = Math.min(d, availableShare); supplies.set(slot, r); // Update the rates availableCapacity -= r; @@ -128,8 +128,8 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer @Override public void addConsumerEdge(FlowEdge consumerEdge) { this.consumerEdges.add(consumerEdge); - this.demands.add(0f); - this.supplies.add(0f); + this.demands.add(0.0); + this.supplies.add(0.0); } @Override @@ -164,7 +164,7 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer } @Override - public void handleDemand(FlowEdge consumerEdge, float newDemand) { + public void handleDemand(FlowEdge consumerEdge, double newDemand) { int idx = consumerEdges.indexOf(consumerEdge); if (idx == -1) { @@ -172,14 +172,14 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer return; } - float prevDemand = demands.get(idx); + double prevDemand = demands.get(idx); demands.set(idx, newDemand); this.totalDemand += (newDemand - prevDemand); } @Override - public void handleSupply(FlowEdge supplierEdge, float newSupply) { + public void handleSupply(FlowEdge supplierEdge, double newSupply) { if (newSupply == this.totalSupply) { return; } @@ -188,22 +188,18 @@ public class Multiplexer extends FlowNode implements FlowSupplier, FlowConsumer } @Override - public void pushDemand(FlowEdge supplierEdge, float newDemand) { + public void pushDemand(FlowEdge supplierEdge, double newDemand) { this.supplierEdge.pushDemand(newDemand); } @Override - public void pushSupply(FlowEdge consumerEdge, float newSupply) { + public void pushSupply(FlowEdge consumerEdge, double newSupply) { int idx = consumerEdges.indexOf(consumerEdge); if (idx == -1) { System.out.println("Error (Multiplexer): pushing supply to an unknown consumer"); } - if (newSupply == supplies.get(idx)) { - return; - } - supplies.set(idx, newSupply); consumerEdge.pushSupply(newSupply); } diff --git a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowConsumer.java b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowConsumer.java index 7ba5dea7..ddb40794 100644 --- a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowConsumer.java +++ b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowConsumer.java @@ -24,9 +24,9 @@ package org.opendc.simulator.engine; public interface FlowConsumer { - void handleSupply(FlowEdge supplierEdge, float newSupply); + void handleSupply(FlowEdge supplierEdge, double newSupply); - void pushDemand(FlowEdge supplierEdge, float newDemand); + void pushDemand(FlowEdge supplierEdge, double newDemand); void addSupplierEdge(FlowEdge supplierEdge); diff --git a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowEdge.java b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowEdge.java index 0edc9e68..d89740a2 100644 --- a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowEdge.java +++ b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowEdge.java @@ -32,10 +32,10 @@ public class FlowEdge { private FlowConsumer consumer; private FlowSupplier supplier; - private float demand = 0.0f; - private float supply = 0.0f; + private double demand = 0.0; + private double supply = 0.0; - private float capacity; + private double capacity; public FlowEdge(FlowConsumer consumer, FlowSupplier supplier) { if (!(consumer instanceof FlowNode)) { @@ -74,25 +74,22 @@ public class FlowEdge { return supplier; } - public float getCapacity() { + public double getCapacity() { return capacity; } - public float getDemand() { + public double getDemand() { return this.demand; } - public float getSupply() { + public double getSupply() { return this.supply; } /** * Push new demand from the Consumer to the Supplier */ - public void pushDemand(float newDemand) { - if (newDemand == this.demand) { - return; - } + public void pushDemand(double newDemand) { this.demand = newDemand; this.supplier.handleDemand(this, newDemand); @@ -102,10 +99,7 @@ public class FlowEdge { /** * Push new supply from the Supplier to the Consumer */ - public void pushSupply(float newSupply) { - if (newSupply == this.supply) { - return; - } + public void pushSupply(double newSupply) { this.supply = newSupply; this.consumer.handleSupply(this, newSupply); diff --git a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowSupplier.java b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowSupplier.java index 87729fca..955f4943 100644 --- a/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowSupplier.java +++ b/opendc-simulator/opendc-simulator-flow/src/main/java/org/opendc/simulator/engine/FlowSupplier.java @@ -24,13 +24,13 @@ package org.opendc.simulator.engine; public interface FlowSupplier { - void handleDemand(FlowEdge consumerEdge, float newDemand); + void handleDemand(FlowEdge consumerEdge, double newDemand); - void pushSupply(FlowEdge consumerEdge, float newSupply); + void pushSupply(FlowEdge consumerEdge, double newSupply); void addConsumerEdge(FlowEdge consumerEdge); void removeConsumerEdge(FlowEdge consumerEdge); - float getCapacity(); + double getCapacity(); } |
