From b5b2f7178fd17dfcb422402fbe4275653554e4c9 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 17 May 2020 01:25:05 -0400 Subject: [PATCH] XML tune export progress --- .../src/com/opensr5/ini/IniFileModel.java | 9 ++-- .../com/opensr5/ini/field/ArrayIniField.java | 52 +++++++++++++++++++ .../opensr5/ini/test/IniFileReaderTest.java | 10 ++-- 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java diff --git a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java index 0c0f0dc5cc..244e2357bf 100644 --- a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java +++ b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java @@ -1,5 +1,6 @@ package com.opensr5.ini; +import com.opensr5.ini.field.ArrayIniField; import com.opensr5.ini.field.EnumIniField; import com.opensr5.ini.field.IniField; import com.opensr5.ini.field.ScalarIniField; @@ -138,17 +139,15 @@ public class IniFileModel { private void handleFieldDefinition(LinkedList list) { if (list.get(1).equals(FIELD_TYPE_SCALAR)) { - ScalarIniField field = ScalarIniField.parse(list); - registerField(field); + registerField(ScalarIniField.parse(list)); } else if (list.get(1).equals(FIELD_TYPE_STRING)) { } else if (list.get(1).equals(FIELD_TYPE_ARRAY)) { + registerField(ArrayIniField.parse(list)); } else if (list.get(1).equals(FIELD_TYPE_BITS)) { - EnumIniField field = EnumIniField.parse(list); - registerField(field); + registerField(EnumIniField.parse(list)); } else { throw new IllegalStateException("Unexpected " + list); } - } private void registerField(IniField field) { diff --git a/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java b/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java new file mode 100644 index 0000000000..3539bd22e8 --- /dev/null +++ b/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java @@ -0,0 +1,52 @@ +package com.opensr5.ini.field; + +import com.rusefi.config.FieldType; + +import java.util.LinkedList; + +public class ArrayIniField extends IniField { + private final FieldType type; + private final int cols; + private final int rows; + + public ArrayIniField(String name, int offset, FieldType type, int cols, int rows) { + super(name, offset); + this.type = type; + this.cols = cols; + this.rows = rows; + } + + public FieldType getType() { + return type; + } + + public int getCols() { + return cols; + } + + public int getRows() { + return rows; + } + + public static IniField parse(LinkedList list) { + String name = list.get(0); + FieldType type = FieldType.parseTs(list.get(2)); + int offset = Integer.parseInt(list.get(3)); + String size = list.get(4); + size = size.replaceAll("[\\]\\[x]", " ").trim(); + String dimentions[] = size.split(" "); + int cols; + int rows; + if (dimentions.length == 1) { + cols = 1; + rows = Integer.parseInt(dimentions[0]); + } else if (dimentions.length == 2) { + cols = Integer.parseInt(dimentions[0]); + rows = Integer.parseInt(dimentions[1]); + } else { + throw new IllegalStateException("Unexpected " + size); + } + + return new ArrayIniField(name, offset, type, cols, rows); + } +} diff --git a/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java b/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java index 3f4b19e467..8ad7b52f9a 100644 --- a/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java +++ b/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java @@ -4,6 +4,7 @@ import com.opensr5.ini.IniFileMetaInfo; import com.opensr5.ini.IniFileModel; import com.opensr5.ini.IniFileReader; import com.opensr5.ini.RawIniFile; +import com.opensr5.ini.field.ArrayIniField; import com.opensr5.ini.field.EnumIniField; import org.jetbrains.annotations.NotNull; import org.junit.Test; @@ -126,12 +127,15 @@ public class IniFileReaderTest { @Test public void testCurveField() { - String string = - " \tmap_samplingAngleBins\t\t\t= array, F32,\t108,\t[8],\t\"\", 1, 0, 0.0, 18000, 2\n"; + String string = "page = 1\n" + + " \tname\t\t\t= array, F32,\t108,\t[8],\t\"\", 1, 0, 0.0, 18000, 2\n"; RawIniFile lines = IniFileReader.read(new ByteArrayInputStream(string.getBytes())); IniFileModel model = new IniFileModel().readIniFile(lines); - assertEquals(0, model.getAllFields().size()); + assertEquals(1, model.allIniFields.size()); + ArrayIniField field = (ArrayIniField) model.allIniFields.get("name"); + assertEquals(1, field.getCols()); + assertEquals(8, field.getRows()); } }