Skip to content

Commit

Permalink
[#161] Moved the TokenBuffer variants out to packages that use them, …
Browse files Browse the repository at this point in the history
…and restrict field visibility
  • Loading branch information
susanw1 committed Sep 7, 2024
1 parent fcef505 commit 0b4fc3d
Show file tree
Hide file tree
Showing 22 changed files with 294 additions and 226 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.zscript.model.modules.testing.test;

import java.nio.charset.StandardCharsets;
import java.util.EnumSet;
import java.util.Optional;
import java.util.OptionalInt;
Expand All @@ -20,9 +19,9 @@

import net.zscript.client.modules.test.testing.TestingModule;
import net.zscript.client.modules.test.testing.TestingModule.TestCommand0Command.Builder.BitsetReqTestE;
import net.zscript.javaclient.commandbuilder.commandnodes.ZscriptCommandBuilder;
import net.zscript.javaclient.commandbuilder.ZscriptFieldOutOfRangeException;
import net.zscript.javaclient.commandbuilder.ZscriptMissingFieldException;
import net.zscript.javaclient.commandbuilder.commandnodes.ZscriptCommandBuilder;

public class JavaCommandBuilderBuildTest {
@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
import net.zscript.javaclient.commandbuilder.commandnodes.ResponseCaptor;
import net.zscript.javaclient.commandbuilder.commandnodes.ZscriptCommandBuilder;
import net.zscript.javaclient.commandbuilder.commandnodes.ZscriptCommandNode;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.tokenizer.TokenBuffer.TokenReader;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.tokenizer.Tokenizer;
import net.zscript.tokenizer.ZscriptTokenExpression;

public class JavaCommandBuilderResponseTest {
final TokenExtendingBuffer buffer = new TokenExtendingBuffer();
final ExtendingTokenBuffer buffer = new ExtendingTokenBuffer();
final Tokenizer tokenizer = new Tokenizer(buffer.getTokenWriter(), 2);
final TokenReader tokenReader = buffer.getTokenReader();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package net.zscript.javaclient.tokens;

import net.zscript.tokenizer.AbstractArrayTokenBuffer;

/**
* A TokenBuffer that automatically expands on being filled, for handling Zscript responses in a Client.
*/
public class ExtendingTokenBuffer extends AbstractArrayTokenBuffer {
public ExtendingTokenBuffer() {
super(20);
}

/**
* There's always room, as we auto-expand.
*
* @param writeCursor
* @param size
* @return always true
*/
@Override
protected boolean checkAvailableCapacityFrom(int writeCursor, int size) {
return true;
}

/**
* Expands the underlying array, and returns the offset we were trying for now that it will fit.
* <p>
* {@inheritDoc}
*
* @param overflowedOffset the offset we were trying to access
* @return the overflowedOffset that was passed in, as there's now enough space
*/
@Override
protected int offsetOnOverflow(int overflowedOffset) {
// expand to double current size
extendData(getDataSize());
return overflowedOffset;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
import org.junit.jupiter.params.provider.MethodSource;

import net.zscript.javaclient.commandPaths.CommandExecutionPath;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.tokenizer.Tokenizer;

public class CommandExecutionPathRegenerationTest {

@ParameterizedTest
@MethodSource
public void shouldProduceActionsForLogicalCommandSeries(final String input, final String output) {
TokenExtendingBuffer bufferCmd = new TokenExtendingBuffer();
ExtendingTokenBuffer bufferCmd = new ExtendingTokenBuffer();
Tokenizer tokenizerCmd = new Tokenizer(bufferCmd.getTokenWriter(), 2);
for (byte b : input.getBytes(StandardCharsets.UTF_8)) {
tokenizerCmd.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import net.zscript.ascii.AnsiCharacterStylePrinter;
import net.zscript.javaclient.commandPaths.CommandExecutionPath;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.tokenizer.Tokenizer;

public class CompleteCommandGrapherTest {
Expand All @@ -23,7 +23,7 @@ public class CompleteCommandGrapherTest {
@ParameterizedTest
@MethodSource
public void shouldProduceGoodGraphs(final String input, final String output) {
TokenExtendingBuffer bufferCmd = new TokenExtendingBuffer();
ExtendingTokenBuffer bufferCmd = new ExtendingTokenBuffer();
Tokenizer tokenizerCmd = new Tokenizer(bufferCmd.getTokenWriter(), 2);
for (byte b : input.getBytes(StandardCharsets.UTF_8)) {
tokenizerCmd.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import net.zscript.javaclient.addressing.CompleteAddressedResponse;
import net.zscript.javaclient.nodes.Connection;
import net.zscript.javaclient.threading.ZscriptWorkerThread;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.tokenizer.Tokenizer;

public abstract class RawConnection implements Connection, AutoCloseable {
Expand Down Expand Up @@ -44,7 +44,7 @@ public final void onReceive(Consumer<AddressedResponse> resp) {
onReceiveBytes(data -> thread.moveOntoThread(() -> {
AddressedResponse parsed = null;
try {
TokenExtendingBuffer buffer = new TokenExtendingBuffer();
ExtendingTokenBuffer buffer = new ExtendingTokenBuffer();
Tokenizer t = new Tokenizer(buffer.getTokenWriter(), 2);
for (byte b : data) {
t.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import net.zscript.javaclient.commandbuilder.notifications.NotificationId;
import net.zscript.javaclient.nodes.ZscriptNode;
import net.zscript.javaclient.sequence.CommandSequence;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.model.ZscriptModel;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.tokenizer.Tokenizer;

public class Device {
Expand Down Expand Up @@ -133,7 +133,7 @@ public ResponseSequenceCallback sendAndWaitExpectSuccess(final CommandSequenceNo
}

public void send(final byte[] cmdSeq, final Consumer<byte[]> callback) {
TokenExtendingBuffer buffer = new TokenExtendingBuffer();
ExtendingTokenBuffer buffer = new ExtendingTokenBuffer();
Tokenizer tok = new Tokenizer(buffer.getTokenWriter(), 2);
for (byte b : cmdSeq) {
tok.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import net.zscript.javaclient.connectors.ZscriptConnectors;
import net.zscript.javaclient.connectors.serial.SerialConnector;
import net.zscript.javaclient.sequence.CommandSequence;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.model.modules.base.CoreModule;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.tokenizer.Tokenizer;

class SerialMain {
Expand Down Expand Up @@ -91,7 +91,7 @@ public static void main(String[] args) throws IOException, InterruptedException
});
for (int i = 0; i < 10; i++) {
byte[] ba = CoreModule.echoBuilder().setAny('A', 35).build().asString().getBytes(StandardCharsets.UTF_8);
TokenExtendingBuffer buffer = new TokenExtendingBuffer();
ExtendingTokenBuffer buffer = new ExtendingTokenBuffer();
Tokenizer t = new Tokenizer(buffer.getTokenWriter(), 2);
for (byte b : ba) {
t.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import net.zscript.javaclient.connectors.ZscriptConnectors;
import net.zscript.javaclient.connectors.ZscriptConnectors.ZscriptConnector;
import net.zscript.javaclient.sequence.CommandSequence;
import net.zscript.javaclient.tokens.ExtendingTokenBuffer;
import net.zscript.model.modules.base.CoreModule;
import net.zscript.tokenizer.TokenExtendingBuffer;
import net.zscript.tokenizer.Tokenizer;

class TcpMain {
Expand All @@ -23,7 +23,7 @@ public static void main(String[] args) throws Exception {
conn.onReceive((response) -> {
System.out.println("Response: " + response.toString());
});
TokenExtendingBuffer buffer = new TokenExtendingBuffer();
ExtendingTokenBuffer buffer = new ExtendingTokenBuffer();
Tokenizer t = new Tokenizer(buffer.getTokenWriter(), 2);
for (byte b : CoreModule.echoBuilder().setAny('A', 1234).build().asString().getBytes(StandardCharsets.UTF_8)) {
t.accept(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,26 @@ public static void execute(List<ScriptSpace> spaces, CommandContext ctx) {
ctx.status(ZscriptStatus.VALUE_OUT_OF_RANGE);
return;
}
ZscriptCommandOutStream out = ctx.getOutStream();
ScriptSpace target = spaces.get(spaceIndex.getAsInt());
out.writeField('P', target.getCurrentLength());
if (target.isRunning()) {

ZscriptCommandOutStream out = ctx.getOutStream();
ScriptSpace targetSpace = spaces.get(spaceIndex.getAsInt());
out.writeField('P', targetSpace.getCurrentLength());

if (targetSpace.isRunning()) {
out.writeField('R', 0);
}
if (target.canBeWrittenTo()) {

if (targetSpace.isWritable()) {
out.writeField('W', 0);
}

out.writeField('L', 0xFFFF);
OptionalInt runOpt = ctx.getField('R');
if (runOpt.isPresent()) {
if (runOpt.getAsInt() != 0) {
target.run();
targetSpace.run();
} else {
target.stop();
targetSpace.stop();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import net.zscript.javareceiver.core.ZscriptCommandOutStream;
import net.zscript.javareceiver.execution.CommandContext;
import net.zscript.javareceiver.scriptSpaces.ScriptSpace;
import net.zscript.javareceiver.scriptSpaces.ScriptSpaceTokenBuffer.ScriptSpaceWriterTokenBuffer;
import net.zscript.model.components.ZscriptStatus;
import net.zscript.tokenizer.ScriptSpaceBuffer.ScriptSpaceWriterBuffer;
import net.zscript.tokenizer.Tokenizer;

public class ScriptSpaceWriteCommand {
Expand All @@ -21,18 +21,21 @@ public static void execute(List<ScriptSpace> spaces, CommandContext ctx) {
ctx.status(ZscriptStatus.VALUE_OUT_OF_RANGE);
return;
}

ZscriptCommandOutStream out = ctx.getOutStream();
ScriptSpace target = spaces.get(spaceIndex.getAsInt());
if (target.isRunning()) {
ctx.status(ZscriptStatus.COMMAND_FAIL);
return;
}
ScriptSpaceWriterBuffer writer;

ScriptSpaceWriterTokenBuffer writer;
if (ctx.hasField((byte) 'R')) {
writer = target.overwrite();
} else {
writer = target.append();
}

Tokenizer tok = new Tokenizer(writer.getTokenWriter(), 2);
for (Iterator<Byte> iterator = ctx.getBigField(); iterator.hasNext(); ) {
tok.accept(iterator.next());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,24 @@
import net.zscript.javareceiver.core.Zscript;
import net.zscript.javareceiver.execution.ActionSource;
import net.zscript.javareceiver.execution.ZscriptAction;
import net.zscript.javareceiver.scriptSpaces.ScriptSpaceTokenBuffer.ScriptSpaceWriterTokenBuffer;
import net.zscript.javareceiver.semanticParser.ExecutionActionFactory;
import net.zscript.javareceiver.semanticParser.SemanticParser;
import net.zscript.tokenizer.ScriptSpaceBuffer;
import net.zscript.tokenizer.ScriptSpaceBuffer.ScriptSpaceWriterBuffer;
import net.zscript.tokenizer.Tokenizer;

/**
*
*/
public class ScriptSpace implements ActionSource {
private final ScriptSpaceOutStream outStream;
private final ScriptSpaceBuffer buffer;
private final SemanticParser parser;
private final boolean canBeWrittenTo;
private final ScriptSpaceOutStream outStream;
private final ScriptSpaceTokenBuffer buffer;
private final SemanticParser parser;
private final boolean isWritable;

public static ScriptSpace from(Zscript z, String str) {
ScriptSpaceBuffer buffer = new ScriptSpaceBuffer();
ScriptSpaceWriterBuffer writer = buffer.fromStart();
Tokenizer tok = new Tokenizer(writer.getTokenWriter(), 2);
ScriptSpaceTokenBuffer buffer = new ScriptSpaceTokenBuffer();
ScriptSpaceWriterTokenBuffer writer = buffer.fromStart();
Tokenizer tok = new Tokenizer(writer.getTokenWriter(), 2);
for (byte b : str.getBytes(StandardCharsets.UTF_8)) {
tok.accept(b);
}
Expand All @@ -30,17 +32,17 @@ public static ScriptSpace from(Zscript z, String str) {
}

public static ScriptSpace blank(Zscript z) {
ScriptSpaceBuffer buffer = new ScriptSpaceBuffer();
ScriptSpace space = new ScriptSpace(z, buffer, true);
ScriptSpaceTokenBuffer buffer = new ScriptSpaceTokenBuffer();
ScriptSpace space = new ScriptSpace(z, buffer, true);
space.stop();
return space;
}

public ScriptSpace(Zscript z, ScriptSpaceBuffer buffer, boolean canBeWrittenTo) {
private ScriptSpace(Zscript z, ScriptSpaceTokenBuffer buffer, boolean isWritable) {
this.buffer = buffer;
this.parser = new SemanticParser(buffer.getTokenReader(), new ExecutionActionFactory());
this.outStream = new ScriptSpaceOutStream(z, parser, new byte[32]);
this.canBeWrittenTo = canBeWrittenTo;
this.isWritable = isWritable;
}

@Override
Expand All @@ -53,20 +55,20 @@ public OutStream getOutStream(Zscript zscript) {
return outStream;
}

public boolean canBeWrittenTo() {
return canBeWrittenTo;
public boolean isWritable() {
return isWritable;
}

public ScriptSpaceWriterBuffer append() {
if (canBeWrittenTo) {
public ScriptSpaceWriterTokenBuffer append() {
if (isWritable) {
return buffer.append();
} else {
throw new UnsupportedOperationException();
}
}

public ScriptSpaceWriterBuffer overwrite() {
if (canBeWrittenTo) {
public ScriptSpaceWriterTokenBuffer overwrite() {
if (isWritable) {
return buffer.fromStart();
} else {
throw new UnsupportedOperationException();
Expand All @@ -88,5 +90,4 @@ public void run() {
public void stop() {
parser.stop();
}

}
Loading

0 comments on commit 0b4fc3d

Please sign in to comment.