diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldIterator.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldIterator.java index f5e62dd782..39cbe2f41d 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldIterator.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldIterator.java @@ -39,22 +39,7 @@ public class FieldIterator { } public void loop() { - FieldsStrategy empty = new FieldsStrategy() { - @Override - int writeOneField(FieldIterator iterator, String prefix, int tsPosition) { - return 0; - } - }; -// -// empty.writeFields(fields, "", 0); - - FieldIterator iterator = new FieldIterator(fields); - - for (int i = 0; i < fields.size(); i++) { - start(i); - empty.writeOneField(iterator, "", 0); - end(); - } + FieldsStrategy.VOID.loopIterator(fields, "", 0, this); } public void end() { @@ -62,4 +47,8 @@ public class FieldIterator { prev = cf; bitState.incrementBitIndex(cf, next); } + + public int adjustSize(int tsPosition) { + return tsPosition + cf.getSize(next); + } } diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldsStrategy.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldsStrategy.java index 01f1503642..008a7269f1 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldsStrategy.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FieldsStrategy.java @@ -11,6 +11,13 @@ import java.util.List; * @see PerFieldWithStructuresIterator#strategy */ public abstract class FieldsStrategy { + static final FieldsStrategy VOID = new FieldsStrategy() { + @Override + int writeOneField(FieldIterator iterator, String prefix, int tsPosition) { + return 0; + } + }; + public int run(ReaderState state, ConfigStructure structure, int structureStartingTsPosition) { if (state.isStackEmpty()) { return writeFields(structure.getTsFields(), "", structureStartingTsPosition); @@ -20,6 +27,10 @@ public abstract class FieldsStrategy { protected int writeFields(List fields, String prefix, int tsPosition) { FieldIterator iterator = new FieldIterator(fields); + return loopIterator(fields, prefix, tsPosition, iterator); + } + + protected int loopIterator(List fields, String prefix, int tsPosition, FieldIterator iterator) { for (int i = 0; i < fields.size(); i++) { iterator.start(i); tsPosition = writeOneField(iterator, prefix, tsPosition); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaFieldsConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaFieldsConsumer.java index 3da79fee49..6b6085e2ae 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaFieldsConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaFieldsConsumer.java @@ -79,8 +79,7 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer { writeJavaFieldName(nameWithPrefix, tsPosition); content.append("FieldType.BIT, " + bitIndex + ")" + terminateField()); } - tsPosition += configField.getSize(next); - return tsPosition; + return iterator.adjustSize(tsPosition); } if (TypesHelper.isFloat(configField.getTypeName())) { @@ -115,9 +114,7 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer { } } - tsPosition += configField.getSize(next); - - return tsPosition; + return iterator.adjustSize(tsPosition); } }; fieldsStrategy.run(state, structure, 0); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaSensorsConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaSensorsConsumer.java index 8a3590ae39..0d5987d82d 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaSensorsConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/JavaSensorsConsumer.java @@ -62,7 +62,7 @@ public class JavaSensorsConsumer implements ConfigurationConsumer { } - tsPosition += configField.getSize(next); + tsPosition = iterator.adjustSize(tsPosition); // this value would be consumed by LiveDataProcessor // todo: too many variables that's fragile shall we move tsPosition to iterator state? structSize = tsPosition - sensorTsPosition; diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/TsOutput.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/TsOutput.java index b35937cd13..f6c15edd58 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/TsOutput.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/TsOutput.java @@ -61,8 +61,7 @@ public class TsOutput { // note that we need to handle account for unused bits size below! if (configField.getName().startsWith(ConfigStructureImpl.ALIGNMENT_FILL_AT)) { - tsPosition += configField.getSize(next); - return tsPosition; + return it.adjustSize(tsPosition); } if (configField.isDirective() && configField.getComment() != null) { @@ -94,8 +93,7 @@ public class TsOutput { tsHeader.append(EOL); } - tsPosition += configField.getSize(next); - return tsPosition; + return it.adjustSize(tsPosition); } if (configField.getState().getTsCustomLine().containsKey(configField.getTypeName())) {