Skip to content

Commit ddca5d7

Browse files
committed
add unpack("i")
1 parent 74ab769 commit ddca5d7

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/main/java/org/perlonjava/operators/Unpack.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@ public class Unpack {
2020

2121
static {
2222
// Initialize format handlers
23+
handlers.put('c', new CFormatHandler());
2324
handlers.put('C', new CFormatHandler());
2425
handlers.put('S', new NumericFormatHandler.ShortHandler(false));
2526
handlers.put('s', new NumericFormatHandler.ShortHandler(true));
2627
handlers.put('L', new NumericFormatHandler.LongHandler(false));
2728
handlers.put('l', new NumericFormatHandler.LongHandler(true));
29+
handlers.put('i', new NumericFormatHandler.LongHandler(true));
30+
handlers.put('I', new NumericFormatHandler.LongHandler(true));
2831
handlers.put('N', new NumericFormatHandler.NetworkLongHandler());
2932
handlers.put('n', new NumericFormatHandler.NetworkShortHandler());
3033
handlers.put('V', new NumericFormatHandler.VAXLongHandler());
@@ -40,6 +43,7 @@ public class Unpack {
4043
handlers.put('h', new HexStringFormatHandler('h'));
4144
handlers.put('H', new HexStringFormatHandler('H'));
4245
handlers.put('W', new WFormatHandler());
46+
handlers.put('x', new XFormatHandler());
4347
// Note: U handler is created dynamically based on startsWithU
4448
}
4549

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.perlonjava.operators.unpack;
2+
3+
import org.perlonjava.operators.UnpackState;
4+
import org.perlonjava.runtime.RuntimeBase;
5+
import org.perlonjava.runtime.RuntimeScalar;
6+
7+
import java.nio.ByteBuffer;
8+
import java.util.List;
9+
10+
/**
11+
* Handles 'x' format - byte zero.
12+
*/
13+
public class XFormatHandler implements FormatHandler {
14+
@Override
15+
public void unpack(UnpackState state, List<RuntimeBase> output, int count, boolean isStarCount) {
16+
for (int i = 0; i < count; i++) {
17+
if (state.isCharacterMode()) {
18+
output.add(new RuntimeScalar("\0"));
19+
} else {
20+
output.add(new RuntimeScalar("\0"));
21+
}
22+
}
23+
}
24+
25+
@Override
26+
public int getFormatSize() {
27+
return 1;
28+
}
29+
}

0 commit comments

Comments
 (0)