From 1b84bac3d5c8912344e89f5c5445b0667bda743f Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 11 Dec 2021 04:04:15 -0500 Subject: [PATCH] generator refactoring --- java_tools/ConfigDefinition.jar | Bin 3566829 -> 3569441 bytes .../rusefi/output/BaseCHeaderConsumer.java | 18 ++++++++---------- .../com/rusefi/output/ConfigStructure.java | 6 +++--- .../output/FieldIteratorWithOffset.java | 13 +++++++++++++ 4 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIteratorWithOffset.java diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index f06d2a9ba0755142f5084a04f43dcd0b6a6ae124..ec414955796efd3789883c5968b14687ecc42700 100644 GIT binary patch delta 48810 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
CBy~|wTT>H19ic;$>G?I2m-P2$FaM-UVZ%yI* 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 V#qTCsX0yy@Xq4`)<=M?Z{U0%%1snhX delta 44393 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 diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java index 8407dceb8e..fb0dcc62e0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java @@ -8,13 +8,14 @@ public abstract class BaseCHeaderConsumer implements ConfigurationConsumer { private static final String BOOLEAN_TYPE = "bool"; private final StringBuilder content = new StringBuilder(); - private static String getHeaderText(ConfigField configField, int currentOffset, int bitIndex) { + private static String getHeaderText(FieldIteratorWithOffset iterator) { + ConfigField configField = iterator.cf; if (configField.isBit()) { - String comment = "\t/**" + EOL + ConfigDefinition.packComment(configField.getCommentContent(), "\t") + "\toffset " + currentOffset + " bit " + bitIndex + " */" + EOL; + String comment = "\t/**" + EOL + ConfigDefinition.packComment(configField.getCommentContent(), "\t") + "\toffset " + iterator.currentOffset + " bit " + iterator.bitState.get() + " */" + EOL; return comment + "\t" + BOOLEAN_TYPE + " " + configField.getName() + " : 1 {};" + EOL; } - String cEntry = ConfigDefinition.getComment(configField.getCommentContent(), currentOffset, configField.getUnits()); + String cEntry = ConfigDefinition.getComment(configField.getCommentContent(), iterator.currentOffset, configField.getUnits()); String typeName = configField.getType(); @@ -46,19 +47,16 @@ public abstract class BaseCHeaderConsumer implements ConfigurationConsumer { content.append("// start of " + structure.name + EOL); content.append("struct " + structure.name + " {" + EOL); - int currentOffset = 0; - - FieldIterator iterator = new FieldIterator(structure.cFields); + FieldIteratorWithOffset iterator = new FieldIteratorWithOffset(structure.cFields); for (int i = 0; i < structure.cFields.size(); i++) { iterator.start(i); - content.append(getHeaderText(iterator.cf, currentOffset, iterator.bitState.get())); + content.append(getHeaderText(iterator)); - // todo: do we have a bug with conditional field offsets being wrong? - currentOffset += iterator.cf.getSize(iterator.next); + iterator.currentOffset += iterator.cf.getSize(iterator.next); iterator.end(); } - content.append("\t/** total size " + currentOffset + "*/" + EOL); + content.append("\t/** total size " + iterator.currentOffset + "*/" + EOL); content.append("};" + EOL + EOL); } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java index 9131d1b12f..3e5b23d294 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java @@ -58,14 +58,14 @@ public class ConfigStructure { * we make alignment decision based on C fields since we expect iteration and non-iteration fields * to match in size */ - totalSize = 0; - FieldIterator iterator = new FieldIterator(cFields); + FieldIteratorWithOffset iterator = new FieldIteratorWithOffset(cFields); for (int i = 0; i < cFields.size(); i++) { iterator.start(i); iterator.end(); - totalSize += iterator.cf.getSize(iterator.next); + iterator.currentOffset += iterator.cf.getSize(iterator.next); } + totalSize = iterator.currentOffset; int fillSize = totalSize % 4 == 0 ? 0 : 4 - (totalSize % 4); if (fillSize != 0) { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIteratorWithOffset.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIteratorWithOffset.java new file mode 100644 index 0000000000..b6c6f47cda --- /dev/null +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIteratorWithOffset.java @@ -0,0 +1,13 @@ +package com.rusefi.output; + +import com.rusefi.ConfigField; + +import java.util.List; + +public class FieldIteratorWithOffset extends FieldIterator { + public int currentOffset; + + public FieldIteratorWithOffset(List tsFields) { + super(tsFields); + } +}