From 1c86e4a2f9fc97d9d5103a97fd9e1cc524422d0b Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 29 Sep 2018 21:15:19 -0700 Subject: [PATCH] refactoring --- .../models/src/com/rusefi/CyclicBuffer.java | 34 ++++++------------- .../models/src/com/rusefi/DataBuffer.java | 26 ++++++++++++++ .../src/com/rusefi/TimeBasedBuffer.java | 4 +++ .../src/com/rusefi/core/SensorStats.java | 3 +- .../src/com/rusefi/test/CyclicBufferTest.java | 7 ++-- .../com/rusefi/test/TimeBasedBufferTest.java | 4 +++ .../src/com/irnems/file/FrequencyDivider.java | 3 ++ 7 files changed, 54 insertions(+), 27 deletions(-) create mode 100644 java_console/models/src/com/rusefi/DataBuffer.java create mode 100644 java_console/models/src/com/rusefi/TimeBasedBuffer.java create mode 100644 java_console/models/src/com/rusefi/test/TimeBasedBufferTest.java diff --git a/java_console/models/src/com/rusefi/CyclicBuffer.java b/java_console/models/src/com/rusefi/CyclicBuffer.java index b3e215ce82..7141d2fb15 100644 --- a/java_console/models/src/com/rusefi/CyclicBuffer.java +++ b/java_console/models/src/com/rusefi/CyclicBuffer.java @@ -1,6 +1,11 @@ package com.rusefi; -public class CyclicBuffer { +import java.util.Arrays; + +/** + * Fixed-size array backed buffer + */ +public class CyclicBuffer implements DataBuffer { private final double values[]; private int size = 0; @@ -10,17 +15,6 @@ public class CyclicBuffer { values = new double[maxSize]; } - public double getStandardDeviation() { - double accumulator = 0; - double avg = average(); - - for (int i = 0; i < getSize(); i++) { - double v = get(i) - avg; - accumulator += v * v; - } - return Math.sqrt(accumulator); - } - public void add(double value) { if (size < values.length) size++; @@ -30,21 +24,15 @@ public class CyclicBuffer { pointer = 0; } - public double average() { - return sum() / size; - } - - public double sum() { - double result = 0; - for (int i = 0; i < size; i++) - result += values[i]; - return result; - } - public int getSize() { return size; } + @Override + public double[] getValues() { + return Arrays.copyOfRange(values, 0, size); + } + public int getMaxSize() { return values.length; } diff --git a/java_console/models/src/com/rusefi/DataBuffer.java b/java_console/models/src/com/rusefi/DataBuffer.java new file mode 100644 index 0000000000..9b0e74a68e --- /dev/null +++ b/java_console/models/src/com/rusefi/DataBuffer.java @@ -0,0 +1,26 @@ +package com.rusefi; + +public interface DataBuffer { + double[] getValues(); + + static double sum(double[] values) { + double result = 0; + for (double value : values) + result += value; + return result; + } + + static double average(double[] values) { + return sum(values) / values.length; + } + + static double getStandardDeviation(double[] values) { + double accumulator = 0; + double avg = average(values); + for (double value : values) { + double v = value - avg; + accumulator += v * v; + } + return Math.sqrt(accumulator); + } +} diff --git a/java_console/models/src/com/rusefi/TimeBasedBuffer.java b/java_console/models/src/com/rusefi/TimeBasedBuffer.java new file mode 100644 index 0000000000..081c2f5b03 --- /dev/null +++ b/java_console/models/src/com/rusefi/TimeBasedBuffer.java @@ -0,0 +1,4 @@ +package com.rusefi; + +public class TimeBasedBuffer { +} diff --git a/java_console/models/src/com/rusefi/core/SensorStats.java b/java_console/models/src/com/rusefi/core/SensorStats.java index c0f3ca216a..7c476c44b7 100644 --- a/java_console/models/src/com/rusefi/core/SensorStats.java +++ b/java_console/models/src/com/rusefi/core/SensorStats.java @@ -1,6 +1,7 @@ package com.rusefi.core; import com.rusefi.CyclicBuffer; +import com.rusefi.DataBuffer; import com.rusefi.SensorConversion; import com.rusefi.waves.EngineReport; @@ -52,7 +53,7 @@ public class SensorStats { public void onSensorUpdate(double value) { cb.add(value); if (cb.getSize() == cb.getMaxSize()) { - double stdDev = cb.getStandardDeviation(); + double stdDev = DataBuffer.getStandardDeviation(cb.getValues()); SensorCentral.getInstance().setValue(stdDev, destination); } } diff --git a/java_console/models/src/com/rusefi/test/CyclicBufferTest.java b/java_console/models/src/com/rusefi/test/CyclicBufferTest.java index bb2234a66c..b8eff56512 100644 --- a/java_console/models/src/com/rusefi/test/CyclicBufferTest.java +++ b/java_console/models/src/com/rusefi/test/CyclicBufferTest.java @@ -1,6 +1,7 @@ package com.rusefi.test; import com.rusefi.CyclicBuffer; +import com.rusefi.DataBuffer; import org.junit.Test; import static junit.framework.Assert.assertEquals; @@ -13,12 +14,12 @@ public class CyclicBufferTest { cb.add(1); cb.add(3); - assertEquals(2.0, cb.average()); + assertEquals(2.0, DataBuffer.average(cb.getValues())); cb.add(111); cb.add(211); - assertEquals(108.33333333333333, cb.average()); + assertEquals(108.33333333333333, DataBuffer.average(cb.getValues())); - assertEquals(147.1144679039647, cb.getStandardDeviation()); + assertEquals(147.1144679039647, DataBuffer.getStandardDeviation(cb.getValues())); } } \ No newline at end of file diff --git a/java_console/models/src/com/rusefi/test/TimeBasedBufferTest.java b/java_console/models/src/com/rusefi/test/TimeBasedBufferTest.java new file mode 100644 index 0000000000..926a7fefd2 --- /dev/null +++ b/java_console/models/src/com/rusefi/test/TimeBasedBufferTest.java @@ -0,0 +1,4 @@ +package com.rusefi.test; + +public class TimeBasedBufferTest { +} diff --git a/java_console/tools/src/com/irnems/file/FrequencyDivider.java b/java_console/tools/src/com/irnems/file/FrequencyDivider.java index 924f6e5a93..6833a60e58 100644 --- a/java_console/tools/src/com/irnems/file/FrequencyDivider.java +++ b/java_console/tools/src/com/irnems/file/FrequencyDivider.java @@ -7,6 +7,9 @@ import java.io.FileOutputStream; import java.io.IOException; /** + * Simple command line utility + * + * * Date: 3/8/13 * (c) Andrey Belomutskiy */