Skip to content
Snippets Groups Projects
Commit 02f6cadf authored by Lukas Stadler's avatar Lukas Stadler
Browse files

pre-created Strings for raw-to-string operations

parent 7f8800ae
No related branches found
No related tags found
No related merge requests found
......@@ -236,7 +236,7 @@ public abstract class WriteTable extends RExternalBuiltinNode.Arg11 {
return RRuntime.isNA(v) ? cna : ComplexVectorPrinter.encodeComplex(v);
} else if (o instanceof RRaw) {
RRaw v = (RRaw) o;
return RRuntime.rawToHexString(v);
return RRuntime.rawToHexString(v.getValue());
}
throw RInternalError.unimplemented();
}
......@@ -278,7 +278,7 @@ public abstract class WriteTable extends RExternalBuiltinNode.Arg11 {
}
if (x instanceof RAbstractRawVector) {
RAbstractRawVector v = (RAbstractRawVector) x;
return RRuntime.rawToHexString(v.getDataAt(indx));
return RRuntime.rawToHexString(v.getRawDataAt(indx));
}
throw RInternalError.unimplemented();
}
......
......@@ -182,11 +182,15 @@ public class RRuntime {
public static final RSymbol PSEUDO_NULL = new RSymbol("\u0001NULL\u0001");
public static final String UNBOUND = "UNBOUND";
@CompilationFinal(dimensions = 1) private static final String[] rawStringCache = new String[256];
@CompilationFinal(dimensions = 1) private static final String[] numberStringCache = new String[4096];
private static final int MIN_CACHED_NUMBER = -numberStringCache.length / 2;
private static final int MAX_CACHED_NUMBER = numberStringCache.length / 2 - 1;
static {
for (int i = 0; i < rawStringCache.length; i++) {
rawStringCache[i] = Utils.intern(new String(new char[]{Character.forDigit((i & 0xF0) >> 4, 16), Character.forDigit(i & 0x0F, 16)}));
}
for (int i = 0; i < numberStringCache.length; i++) {
numberStringCache[i] = String.valueOf(i + MIN_CACHED_NUMBER);
}
......@@ -347,10 +351,8 @@ public class RRuntime {
return int2complex(raw2int(r));
}
public static String rawToHexString(RRaw operand) {
int value = raw2int(operand);
char[] digits = new char[]{Character.forDigit((value & 0xF0) >> 4, 16), Character.forDigit(value & 0x0F, 16)};
return new String(digits);
public static String rawToHexString(byte operand) {
return rawStringCache[raw2int(operand)];
}
@TruffleBoundary
......
......@@ -245,7 +245,7 @@ final class RRawToStringVectorClosure extends RToStringVectorClosure {
@Override
public String getDataAt(int index) {
return RRuntime.rawToHexString(vector.getDataAt(index));
return RRuntime.rawToHexString(vector.getRawDataAt(index));
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment