You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2021/10/11 10:30:44 UTC
[plc4x] branch feature/mspec-ng updated: - Worked on the float types
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/mspec-ng
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/mspec-ng by this push:
new c4ff261 - Worked on the float types
c4ff261 is described below
commit c4ff2615b5fc3577e17b8aa7495ca62e70aba38b
Author: cdutz <ch...@c-ware.de>
AuthorDate: Mon Oct 11 12:30:30 2021 +0200
- Worked on the float types
---
.../src/test/resources/mspec.example2 | 54 +++++++++++-----------
.../plc4x/java/spi/codegen/fields/FieldReader.java | 1 -
.../spi/codegen/fields/FieldReaderAbstract.java | 7 ++-
.../java/spi/codegen/fields/FieldReaderArray.java | 13 ++++++
.../spi/codegen/fields/FieldReaderChecksum.java | 4 ++
.../java/spi/codegen/fields/FieldReaderConst.java | 2 +-
.../java/spi/codegen/fields/FieldReaderEnum.java | 4 ++
.../java/spi/codegen/fields/FieldReaderManual.java | 6 +++
.../spi/codegen/fields/FieldReaderOptional.java | 4 +-
9 files changed, 63 insertions(+), 32 deletions(-)
diff --git a/code-generation/protocol-base-mspec/src/test/resources/mspec.example2 b/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
index 1cb6b02..77b6d8b 100644
--- a/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
+++ b/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
@@ -73,8 +73,8 @@
/*
* TODO: doesn't compile in java
[type 'UFloatTypeTest'
- [simple ufloat 8.23 'ufloatField']
- [simple ufloat 11.52 'udoubleField']
+ [simple ufloat 32 'ufloatField']
+ [simple ufloat 64 'udoubleField']
]
*/
@@ -92,8 +92,8 @@
[simple byte 'byteField']
[simple int 8 'intField']
[simple uint 8 'uintField']
- [simple float 8.23 'floatField']
- [simple float 11.52 'doubleField']
+ [simple float 32 'floatField']
+ [simple float 64 'doubleField']
[simple string 8 'stringField' encoding='UTF-8']
]
@@ -103,16 +103,16 @@
[abstract bit 'abstractBitField']
[abstract int 8 'abstractIntField']
[abstract uint 8 'abstractUintField']
- [abstract float 8.23 'abstractFloatField']
- [abstract float 11.52 'abstractDoubleField']
+ [abstract float 32 'abstractFloatField']
+ [abstract float 64 'abstractDoubleField']
[abstract string 8 'abstractStringField' encoding='UTF-8']
[typeSwitch 'simpleField'
['0' AbstractedType
[simple bit 'abstractBitField']
[simple int 8 'abstractIntField']
[simple uint 8 'abstractUintField']
- [simple float 8.23 'abstractFloatField']
- [simple float 11.52 'abstractDoubleField']
+ [simple float 32 'abstractFloatField']
+ [simple float 64 'abstractDoubleField']
[simple string 8 'abstractStringField' encoding='UTF-8']
]
]
@@ -124,8 +124,8 @@
[abstract bit 'abstractBitField']
[abstract int 8 'abstractIntField']
[abstract uint 8 'abstractUintField']
- [abstract float 8.23 'abstractFloatField']
- [abstract float 11.52 'abstractDoubleField']
+ [abstract float 32 'abstractFloatField']
+ [abstract float 64 'abstractDoubleField']
[abstract string 8 'abstractStringField' encoding='UTF-8']
[typeSwitch 'simpleField'
['0' AbstractedType
@@ -133,8 +133,8 @@
[simple bit 'abstractBitField']
[simple int 8 'abstractIntField']
[simple uint 8 'abstractUintField']
- [simple float 8.23 'abstractFloatField']
- [simple float 11.52 'abstractDoubleField']
+ [simple float 32 'abstractFloatField']
+ [simple float 64 'abstractDoubleField']
[simple string 8 'abstractStringField' encoding='UTF-8']
]
]
@@ -144,8 +144,8 @@
[array bit 'bitField' count '5']
[array int 8 'intField' count '5']
[array uint 8 'uintField' count '5']
- [array float 8.23 'floatField' count '5']
- [array float 11.52 'doubleField' count '5']
+ [array float 32 'floatField' count '5']
+ [array float 64 'doubleField' count '5']
[array string 8 'stringField' count '5' encoding='UTF-8']
]
@@ -156,8 +156,8 @@
//[checksum int 8 'intField' '100']
//[checksum uint 8 'uintField' '100']
//Float fields cannot be used as checksums
- //[checksum float 8.23 'floatField' '100.0f']
- //[checksum float 11.52 'doubleField' '100.0']
+ //[checksum float 32 'floatField' '100.0f']
+ //[checksum float 64 'doubleField' '100.0']
//String field cannot be used as a checksum
//[checksum vstring '11 * 8' 'stringField' '"HELLO TODDY"' encoding='UTF-8']
//]
@@ -166,8 +166,8 @@
[const bit 'bitField' 'true']
[const int 8 'intField' '100']
[const uint 8 'uintField' '100']
- [const float 8.23 'floatField' '100.0']
- [const float 11.52 'doubleField' '100.0']
+ [const float 32 'floatField' '100.0']
+ [const float 64 'doubleField' '100.0']
[const string 8 'stringField' '"HELLO TODDY"' encoding='UTF-8']
]
@@ -193,8 +193,8 @@
[implicit bit 'bitField' 'simpleField > 0']
[implicit int 8 'intField' 'simpleField']
[implicit uint 8 'uintField' 'simpleField']
- [implicit float 8.23 'floatField' 'simpleField']
- [implicit float 11.52 'doubleField' 'simpleField']
+ [implicit float 32 'floatField' 'simpleField']
+ [implicit float 64 'doubleField' 'simpleField']
//TODO: String literals can't be used in the expression
//[implicit string 8 'stringField' 'simpleField > 0 ? "HELLO TODDY" : "BYE TODDY"' encoding='UTF-8']
]
@@ -219,8 +219,8 @@
// [virtual bit 'virtualBitField' 'simpleField == 0']
// [virtual int 8 'virtualIntField' 'simpleField']
// [virtual uint 8 'virtualUintField' 'simpleField']
-// [virtual float 8.23 'virtualFloatField' 'simpleField']
-// [virtual float 11.52 'virtualDoubleField' 'simpleField']
+// [virtual float 32 'virtualFloatField' 'simpleField']
+// [virtual float 64 'virtualDoubleField' 'simpleField']
// [virtual string 24 'virtualStringField' 'simpleField']
//]
@@ -230,8 +230,8 @@
// [virtual bit 'virtualBitField' 'simpleField == 0']
// [virtual int 8 'virtualIntField' 'simpleField']
// [virtual uint 8 'virtualUintField' 'simpleField']
-// [virtual float 8.23 'virtualFloatField' 'simpleField']
-// [virtual float 11.52 'virtualDoubleField' 'simpleField']
+// [virtual float 32 'virtualFloatField' 'simpleField']
+// [virtual float 64 'virtualDoubleField' 'simpleField']
// [virtual string 24 'virtualStringField' 'simpleField' encoding='UTF-8']
// [typeSwitch 'simpleField'
// ['0' DiscriminatedVirtualType
@@ -387,14 +387,14 @@
]
//TODO: C doesn't support non integer switch fields
-//[enum float 8.23 'EnumTypeFloat'
+//[enum float 32 'EnumTypeFloat'
// ['100.0' LOW]
// ['101.0' MID]
// ['102.0' BIG]
//]
//TODO: C doesn't support non integer switch fields
-//[enum float 11.52 'EnumTypeDouble'
+//[enum float 64 'EnumTypeDouble'
// ['100.0' LOW]
// ['101.0' MID]
// ['102.0' BIG]
@@ -413,7 +413,7 @@
//]
//TODO: Float parameters aren't implemented for constants in enums in C
-//[enum int 8 'EnumTypeAllTest' [bit 'bitType', int 8 'intType', uint 8 'uintType', float 8.23 'floatType', float 11.52 'doubleType', string '-1' 'stringType', EnumType 'enumType']
+//[enum int 8 'EnumTypeAllTest' [bit 'bitType', int 8 'intType', uint 8 'uintType', float 32 'floatType', float 64 'doubleType', string '-1' 'stringType', EnumType 'enumType']
// ['0x01' BOOL ['false' , '1' , '1' , '100.0' , '100.0' , 'BOOL' , 'BOOL']]
// ['0x02' BYTE ['true' , '2' , '2' , '101.1' , '101.1' , 'BYTE' , 'UINT']]
//]
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReader.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReader.java
index c130ecf..382e3ef 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReader.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReader.java
@@ -19,7 +19,6 @@
package org.apache.plc4x.java.spi.codegen.fields;
import org.apache.plc4x.java.spi.codegen.FieldCommons;
-import org.apache.plc4x.java.spi.codegen.WithOption;
import org.apache.plc4x.java.spi.codegen.io.DataReader;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WithReaderArgs;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderAbstract.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderAbstract.java
index cd9e3c7..95eea4f 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderAbstract.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderAbstract.java
@@ -24,13 +24,18 @@ import org.apache.plc4x.java.spi.generation.WithReaderArgs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * This reader should actually never be used as an abstract field never gets read, it only makes sure
+ * abstract accessor methods are generated in the abstract parent type.
+ * @param <T>
+ */
public class FieldReaderAbstract<T> implements FieldReader<T> {
private static final Logger LOGGER = LoggerFactory.getLogger(FieldReaderAbstract.class);
@Override
public T readField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
- return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
+ return null;
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderArray.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderArray.java
index 27ba337..dcca663 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderArray.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderArray.java
@@ -18,6 +18,7 @@
*/
package org.apache.plc4x.java.spi.codegen.fields;
+import jdk.internal.org.objectweb.asm.TypeReference;
import org.apache.plc4x.java.spi.codegen.io.DataReader;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WithReaderArgs;
@@ -33,4 +34,16 @@ public class FieldReaderArray<T> implements FieldReader<T> {
return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
}
+ public T[] readFieldCount(String logicalName, DataReader<T> dataReader, int count, WithReaderArgs... readerArgs) throws ParseException {
+ return null;
+ }
+
+ public T[] readFieldLength(String logicalName, DataReader<T> dataReader, int length, WithReaderArgs... readerArgs) throws ParseException {
+ return null;
+ }
+
+ public T[] readFieldTerminated(String logicalName, DataReader<T> dataReader, T termination, WithReaderArgs... readerArgs) throws ParseException {
+ return null;
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderChecksum.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderChecksum.java
index 10a8dad..ce17bec 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderChecksum.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderChecksum.java
@@ -30,6 +30,10 @@ public class FieldReaderChecksum<T> implements FieldReader<T> {
@Override
public T readField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
+ throw new IllegalStateException("not possible with checksum field");
+ }
+
+ public T readField(String logicalName, DataReader<T> dataReader, T referenceValue, WithReaderArgs... readerArgs) throws ParseException {
return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderConst.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderConst.java
index 136418b..f89a0b0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderConst.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderConst.java
@@ -38,7 +38,7 @@ public class FieldReaderConst<T> implements FieldReader<T> {
}
public void readConstField(String logicalName, DataReader<T> dataReader, T expectedValue, WithReaderArgs... readerArgs) throws ParseException {
- T constValue = dataReader.read(logicalName, readerArgs);
+ T constValue = switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
if (!Objects.equals(constValue, expectedValue)) {
throw new ParseException("Actual value " + constValue + " doesn't match expected " + expectedValue);
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderEnum.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderEnum.java
index 5761a6f..2225c30 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderEnum.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderEnum.java
@@ -30,6 +30,10 @@ public class FieldReaderEnum<T> implements FieldReader<T> {
@Override
public T readField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
+ throw new IllegalStateException("not possible with checksum field");
+ }
+
+ public T readField(String logicalName, DataReader<T> dataReader, String propertyName, WithReaderArgs... readerArgs) throws ParseException {
return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderManual.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderManual.java
index dd22f4b..e355007 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderManual.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderManual.java
@@ -24,12 +24,18 @@ import org.apache.plc4x.java.spi.generation.WithReaderArgs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.function.Function;
+
public class FieldReaderManual<T> implements FieldReader<T> {
private static final Logger LOGGER = LoggerFactory.getLogger(FieldReaderManual.class);
@Override
public T readField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
+ throw new IllegalStateException("not possible with checksum field");
+ }
+
+ public T readField(String logicalName, DataReader<T> dataReader, Function parseFunction, Function serializeFunction, Function lengthFunction, WithReaderArgs... readerArgs) throws ParseException {
return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderOptional.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderOptional.java
index e770a92..a02ab1c 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderOptional.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderOptional.java
@@ -42,9 +42,9 @@ public class FieldReaderOptional<T> implements FieldReader<T> {
int curPos = dataReader.getPos();
try {
- return dataReader.read(logicalName, readerArgs);
+ return switchByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
} catch (ParseAssertException e) {
- LOGGER.trace("Assertion doesnt match for field {}", logicalName, e);
+ LOGGER.debug("Assertion doesnt match for field {}", logicalName, e);
dataReader.setPos(curPos);
return null;
}