package com.coderising.jvm.loader;
import com.coderising.jvm.util.Util;
public class ByteCodeIterator {
private byte[] codes = null;
private int currPos = 0;
public ByteCodeIterator(byte[] codes) {
this.codes = codes;
}
public void back(int i) {
currPos = currPos - 2;
}
public String byteToHexString(byte[] codes) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < codes.length; i++) {
byte b = codes[i];
int value = b & 0xFF;
String strHex = Integer.toHexString(value);
if (strHex.length() < 2) {
strHex = "0" + strHex;
}
buffer.append(strHex);
}
return buffer.toString();
}
public byte[] nextNbytesToHexString(int length) {
byte[] bytes = new byte[length];
int len = currPos + length;
for(int j = 0; currPos < len; j++) {
bytes[j] = codes[currPos++];
}
return bytes;
}
public int nextU1ToInt() {
byte[] u1 = new byte[] { codes[currPos++] };
return Util.byteToInt(u1);
}
public int nextU2ToInt() {
byte[] u2 = new byte[] { codes[currPos++], codes[currPos++] };
return Util.byteToInt(u2);
}
public String nextU4ToHexString() {
byte[] u4 = new byte[] { codes[currPos++], codes[currPos++], codes[currPos++], codes[currPos++] };
return Util.byteToHexString(u4);
}
public int nextU4ToInt() {
byte[] u4 = new byte[] { codes[currPos++], codes[currPos++], codes[currPos++], codes[currPos++] };
return Util.byteToInt(u4);
}
public String nextUxToHexString(int length) {
byte[] codes = nextNbytesToHexString(length);
return byteToHexString(codes);
}
}