automation around outputs section #197

refactoring: extract helper class
This commit is contained in:
rusefillc 2021-11-28 13:04:35 -05:00
parent 2e97642dae
commit a6800cd384
3 changed files with 43 additions and 19 deletions

View File

@ -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<ConfigField> tsFields;
BitState bitState = new BitState();
ConfigField prev = ConfigField.VOID;
ConfigField next;
ConfigField cf;
public FieldIterator(List<ConfigField> 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);
}
}

View File

@ -36,18 +36,16 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer {
} }
private int writeJavaFields(List<ConfigField> tsFields, String prefix, int tsPosition) throws IOException { private int writeJavaFields(List<ConfigField> tsFields, String prefix, int tsPosition) throws IOException {
BitState bitState = new BitState(); FieldIterator iterator = new FieldIterator(tsFields);
ConfigField prev = ConfigField.VOID;
for (int i = 0; i < tsFields.size(); i++) { for (int i = 0; i < tsFields.size(); i++) {
ConfigField next = i == tsFields.size() - 1 ? ConfigField.VOID : tsFields.get(i + 1); iterator.start(i);
ConfigField cf = tsFields.get(i);
// skip duplicate names // skip duplicate names
if (cf.getName().equals(prev.getName()) || cf.isDirective()) if (iterator.cf.getName().equals(iterator.prev.getName()) || iterator.cf.isDirective())
continue; continue;
tsPosition = writeOneField(cf, prefix, tsPosition, next, bitState.get()); tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next, iterator.bitState.get());
bitState.incrementBitIndex(cf, next); iterator.prev = iterator.cf;
prev = cf; iterator.end();
} }
return tsPosition; return tsPosition;
} }

View File

@ -5,7 +5,7 @@ import com.rusefi.*;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.util.Arrays; import java.util.List;
import static com.rusefi.ToolUtil.EOL; 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 { protected int writeTunerStudio(ConfigStructure configStructure, String prefix, Writer tsHeader, int tsPosition) throws IOException {
BitState bitState = new BitState(); List<ConfigField> tsFields = configStructure.tsFields;
ConfigField prev = ConfigField.VOID; FieldIterator iterator = new FieldIterator(tsFields);
int prevTsPosition = tsPosition; int prevTsPosition = tsPosition;
for (int i = 0; i < configStructure.tsFields.size(); i++) { for (int i = 0; i < tsFields.size(); i++) {
ConfigField next = i == configStructure.tsFields.size() - 1 ? ConfigField.VOID : configStructure.tsFields.get(i + 1); iterator.start(i);
ConfigField cf = configStructure.tsFields.get(i);
// if duplicate names, use previous position // if duplicate names, use previous position
if (cf.getName().equals(prev.getName())) { if (iterator.cf.getName().equals(iterator.prev.getName())) {
tsPosition = prevTsPosition; tsPosition = prevTsPosition;
} }
// Update 'prev' state needed for duplicate names recognition // Update 'prev' state needed for duplicate names recognition
if (!cf.isDirective()) { if (!iterator.cf.isDirective()) {
prevTsPosition = tsPosition; 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; return tsPosition;
} }