summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-05 11:10:22 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-05 11:10:42 +0100
commitf65b2ec539bf0dc43b408f3aa64cf764c0086a9a (patch)
treeb709b24a49679320cd9ef6af3fea054323d52801 /src
parent8ad682b242f84fc72499c9d0e1e7c4b0d585607e (diff)
Extract generateEncodeInt() and generateDecodeInt()
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index ee35ebc..02b2a3f 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -18,6 +18,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
public class JavaTransient0Generator implements Generator {
@@ -250,8 +251,21 @@ public class JavaTransient0Generator implements Generator {
}
private static Stream<JavaBlockStatement> generateEncodeInt32(JavaExpression value) {
- return Stream.of(0, 8, 16, 24)
- .map(shiftBy -> new JavaExpressionStatement(
+ return generateEncodeInt(value, 32);
+ }
+
+ private static Stream<JavaBlockStatement> generateDecodeInt32(
+ JavaIdentifier target
+ ) {
+ return generateDecodeInt(target, 32);
+ }
+
+ private static Stream<JavaBlockStatement> generateEncodeInt(
+ JavaExpression value,
+ int bits
+ ) {
+ return byteIndicesInBits(bits)
+ .mapToObj(shiftBy -> new JavaExpressionStatement(
new JavaMethodCall(
new JavaRef(OUTPUT_STREAM_NAME),
JavaIdentifier.of("write"),
@@ -268,14 +282,18 @@ public class JavaTransient0Generator implements Generator {
));
}
- private static Stream<JavaBlockStatement> generateDecodeInt32(
- JavaIdentifier target
+ private static Stream<JavaBlockStatement> generateDecodeInt(
+ JavaIdentifier target,
+ int bits
) {
var statements = new ArrayList<JavaBlockStatement>();
statements.add(new JavaLocalVariableDeclaration(target, new JavaIntegerLiteral(0)));
- for (var shiftBy : List.of(0, 8, 16, 24)) {
+ Iterable<Integer> shiftBys = () -> byteIndicesInBits(bits)
+ .iterator();
+
+ for (var shiftBy : shiftBys) {
statements.add(new JavaExpressionStatement(new JavaBinaryOperation(
JavaBinaryOperator.ASSIGN,
new JavaRef(target),
@@ -298,6 +316,13 @@ public class JavaTransient0Generator implements Generator {
return statements.stream();
}
+ /// For an integer of the given number of bits, find the indices of each
+ /// byte in bits.
+ private static IntStream byteIndicesInBits(int bits) {
+ return IntStream.range(0, bits / 8)
+ .map(x -> x * 8);
+ }
+
private JavaIdentifier encodeMethodName(StructType type) {
return this.javaGenerator.generateFieldName("encode" + type.name());
}