Skip to content

Commit

Permalink
fix(plc4j/codgen): add byte order to read/writer, add enum example
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Oct 8, 2021
1 parent 72852a0 commit 5f268d3
Show file tree
Hide file tree
Showing 24 changed files with 224 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -323,10 +323,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<

FieldReader${field.typeName?cap_first}.INSTANCE.read${field.typeName?cap_first}Field(String logicalName, new DataReaderSimple${helper.getLanguageTypeNameForTypeReference(simpleTypeReference, false)}(readBuffer), ${type.name}.${constField.name?upper_case}))
<#else>
${helper.getLanguageTypeNameForField(field)} ${constField.name} = ${helper.getLanguageTypeNameForField(field)}.enumForValue(${helper.getReadBufferReadMethodCall(constField.name, helper.getEnumBaseTypeReference(constField.type), "", constField)});
if(${constField.name} != ${type.name}.${constField.name?upper_case}) {
throw new ParseException("Expected constant value " + ${type.name}.${constField.name?upper_case} + " but got " + ${constField.name});
}
FieldReader${field.typeName?cap_first}.INSTANCE.read${field.typeName?cap_first}Field(String logicalName, new DataReaderEnumDefault(${helper.getLanguageTypeNameForField(field)}::enumForValue, new DataReaderSimple${helper.getLanguageTypeNameForTypeReference(simpleTypeReference, false)}(readBuffer), ${type.name}.${constField.name?upper_case})))
</#if>
<#break>
<#case "discriminator">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package org.apache.plc4x.java.spi.codegen.io;

import org.apache.plc4x.java.spi.generation.ByteOrder;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.ReadBuffer;
import org.apache.plc4x.java.spi.generation.WithReaderArgs;
Expand Down Expand Up @@ -45,6 +46,16 @@ public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}

@Override
public T read(String logicalName, WithReaderArgs... readerArgs) throws ParseException {
return read(logicalName, complexSupplier, readerArgs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WithReaderArgs;

public interface DataReaderEnum<T> extends DataReader {
public interface DataReaderEnum<T> extends DataReader<T> {

T read(String logicalName, WithReaderArgs... readerArgs) throws ParseException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/
package org.apache.plc4x.java.spi.codegen.io;

import org.apache.plc4x.java.spi.codegen.WithOption;
import org.apache.plc4x.java.spi.generation.ByteOrder;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WithReaderArgs;

Expand All @@ -44,6 +44,16 @@ public void setPos(int position) {
dataReader.setPos(position);
}

@Override
public ByteOrder getByteOrder() {
return dataReader.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
dataReader.setByteOrder(byteOrder);
}

@Override
public T read(String logicalName, WithReaderArgs... readerArgs) throws ParseException {
return read(logicalName, enumResolver, readerArgs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,13 @@ public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public DataReaderSimpleUnsignedShort(ReadBuffer readBuffer) {
}

@Override
public Short read(String logicalName, int bitLength, WithReaderArgs... readerArgs) throws ParseException {
public Short read(String logicalName, int bitLength, WithReaderArgs... readerArgs) throws ParseException {
return readBuffer.readUnsignedShort(logicalName, bitLength, readerArgs);
}

Expand All @@ -40,4 +40,14 @@ public int getPos() {
public void setPos(int position) {
readBuffer.reset(position);
}

@Override
public ByteOrder getByteOrder() {
return readBuffer.getByteOrder();
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
readBuffer.setByteOrder(byteOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public interface ReadBuffer {

boolean hasMore(int numBits);

ByteOrder getByteOrder();

void setByteOrder(ByteOrder byteOrder);

void pullContext(String logicalName, WithReaderArgs... readerArgs);

boolean readBit(String logicalName, WithReaderArgs... readerArgs) throws ParseException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,21 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.util.Objects;

public class ReadBufferByteBased implements ReadBuffer {

private final MyDefaultBitInput bi;
private final ByteOrder byteOrder;
private ByteOrder byteOrder;
private final long totalBytes;

public ReadBufferByteBased(byte[] input) {
this(input, ByteOrder.BIG_ENDIAN);
}

public ReadBufferByteBased(byte[] input, ByteOrder byteOrder) {
Objects.requireNonNull(input);
Objects.requireNonNull(byteOrder);
ArrayByteInput abi = new ArrayByteInput(input);
this.bi = new MyDefaultBitInput(abi);
this.byteOrder = byteOrder;
Expand Down Expand Up @@ -70,6 +73,16 @@ public boolean hasMore(int numBits) {
return (numBits / 8) <= (totalBytes - getPos());
}

@Override
public ByteOrder getByteOrder() {
return byteOrder;
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
this.byteOrder = byteOrder;
}

public byte peekByte(int offset) throws ParseException {
// Remember the old index.
int oldIndex = bi.getDelegate().getIndex();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,17 @@ public boolean hasMore(int numBits) {
return false;
}

@Override
public ByteOrder getByteOrder() {
// NO OP
return ByteOrder.BIG_ENDIAN;
}

@Override
public void setByteOrder(ByteOrder byteOrder) {
// NO OP
}

@Override
public void pullContext(String logicalName, WithReaderArgs... readerArgs) {
logicalName = sanitizeLogicalName(logicalName);
Expand Down
Loading

0 comments on commit 5f268d3

Please sign in to comment.