From a6800cd384ed94d654fb237a11c1b9dabef4c72e Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sun, 28 Nov 2021 13:04:35 -0500 Subject: [PATCH] automation around outputs section #197 refactoring: extract helper class --- .../java/com/rusefi/output/FieldIterator.java | 27 +++++++++++++++++++ .../com/rusefi/output/JavaFieldsConsumer.java | 14 +++++----- .../main/java/com/rusefi/output/TsOutput.java | 21 +++++++-------- 3 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java new file mode 100644 index 0000000000..f433cc8fef --- /dev/null +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java @@ -0,0 +1,27 @@ +package com.rusefi.output; + +import com.rusefi.BitState; +import com.rusefi.ConfigField; + +import java.util.List; + +public class FieldIterator { + private final List tsFields; + BitState bitState = new BitState(); + ConfigField prev = ConfigField.VOID; + ConfigField next; + ConfigField cf; + + public FieldIterator(List tsFields) { + this.tsFields = tsFields; + } + + public void start(int index) { + next = index == tsFields.size() - 1 ? ConfigField.VOID : tsFields.get(index + 1); + cf = tsFields.get(index); + } + + public void end() { + bitState.incrementBitIndex(cf, next); + } +} diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/JavaFieldsConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/JavaFieldsConsumer.java index 19742acabf..b5042f8605 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/JavaFieldsConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/JavaFieldsConsumer.java @@ -36,18 +36,16 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer { } private int writeJavaFields(List tsFields, String prefix, int tsPosition) throws IOException { - BitState bitState = new BitState(); - ConfigField prev = ConfigField.VOID; + FieldIterator iterator = new FieldIterator(tsFields); for (int i = 0; i < tsFields.size(); i++) { - ConfigField next = i == tsFields.size() - 1 ? ConfigField.VOID : tsFields.get(i + 1); - ConfigField cf = tsFields.get(i); + iterator.start(i); // skip duplicate names - if (cf.getName().equals(prev.getName()) || cf.isDirective()) + if (iterator.cf.getName().equals(iterator.prev.getName()) || iterator.cf.isDirective()) continue; - tsPosition = writeOneField(cf, prefix, tsPosition, next, bitState.get()); + tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next, iterator.bitState.get()); - bitState.incrementBitIndex(cf, next); - prev = cf; + iterator.prev = iterator.cf; + iterator.end(); } return tsPosition; } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/TsOutput.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/TsOutput.java index 35e0aa9ad9..f74eb55028 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/TsOutput.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/TsOutput.java @@ -5,7 +5,7 @@ import com.rusefi.*; import java.io.IOException; import java.io.Writer; -import java.util.Arrays; +import java.util.List; import static com.rusefi.ToolUtil.EOL; @@ -100,27 +100,26 @@ public class TsOutput { } protected int writeTunerStudio(ConfigStructure configStructure, String prefix, Writer tsHeader, int tsPosition) throws IOException { - BitState bitState = new BitState(); - ConfigField prev = ConfigField.VOID; + List tsFields = configStructure.tsFields; + FieldIterator iterator = new FieldIterator(tsFields); int prevTsPosition = tsPosition; - for (int i = 0; i < configStructure.tsFields.size(); i++) { - ConfigField next = i == configStructure.tsFields.size() - 1 ? ConfigField.VOID : configStructure.tsFields.get(i + 1); - ConfigField cf = configStructure.tsFields.get(i); + for (int i = 0; i < tsFields.size(); i++) { + iterator.start(i); // if duplicate names, use previous position - if (cf.getName().equals(prev.getName())) { + if (iterator.cf.getName().equals(iterator.prev.getName())) { tsPosition = prevTsPosition; } // Update 'prev' state needed for duplicate names recognition - if (!cf.isDirective()) { + if (!iterator.cf.isDirective()) { prevTsPosition = tsPosition; - prev = cf; + iterator.prev = iterator.cf; } - tsPosition = writeTunerStudio(cf, prefix, tsHeader, tsPosition, next, bitState.get()); + tsPosition = writeTunerStudio(iterator.cf, prefix, tsHeader, tsPosition, iterator.next, iterator.bitState.get()); - bitState.incrementBitIndex(cf, next); + iterator.end(); } return tsPosition; }