package org.jerlang.stdlib.beam_lib;
import org.jerlang.type.Str;
public enum ChunkId implements Comparable<ChunkId> {
ABST("Abst", 10), // Abstract Code
ATOM("Atom", 1), // Atoms
ATTR("Attr", 11), // Attributes
CINF("CInf", 12), // Compile Information
CODE("Code", 8), // Code
EXPT("ExpT", 4), // Export Table
FUNT("FunT", 5), // Function Table
IMPT("ImpT", 6), // Import Table
LINE("Line", 9), // Line Table
LITT("LitT", 2), // Literal Table
LOCT("LocT", 7), // Local Table
STRT("StrT", 3), // String Table
// See lib/kernel/src/hipe_unified_loader.erl:
HA64("HA64", -1), // HiPE, x86_64, (implicit: 64-bit, Unix)
HARM("HARM", -1), // HiPE, arm, v5 (implicit: 32-bit, Linux)
HPPC("HPPC", -1), // HiPE, PowerPC (implicit: 32-bit, Linux)
HP64("HP64", -1), // HiPE, ppc64 (implicit: 64-bit, Linux)
HS8P("HS8P", -1), // HiPE, SPARC, V8+ (implicit: 32-bit)
HX86("HX86", -1); // HiPE, x86, (implicit: Unix)
private final int sortOrder; // ascending
private final String string;
private final int value;
private ChunkId(String string, int sortOrder) {
char a = string.charAt(0);
char b = string.charAt(1);
char c = string.charAt(2);
char d = string.charAt(3);
this.sortOrder = sortOrder;
this.string = string;
this.value = (a << 24) | (b << 16) | (c << 8) | d;
}
public boolean skip() {
return sortOrder == -1;
}
public int sortOrder() {
return sortOrder;
}
public int toInt() {
return value;
}
public Str toStr() {
return new Str(string);
}
@Override
public String toString() {
return string;
}
public static ChunkId of(int bytes) {
for (ChunkId chunkId : values()) {
if (chunkId.value == bytes) {
return chunkId;
}
}
System.err.println("Invalid chunk ID: " + String.format("%x", bytes));
return null;
}
public static ChunkId of(String string) {
for (ChunkId chunkId : values()) {
if (chunkId.string.equals(string)) {
return chunkId;
}
}
System.err.println("Invalid chunk ID: '" + string + "'");
return null;
}
}