package com.github.orajavac.coding2017.jvm.loader;
import java.util.Arrays;
import com.github.orajavac.coding2017.jvm.util.Util;
public class ByteCodeIterator {
private byte[] codes;
private int pos;
public ByteCodeIterator(byte[] codes){
this.codes = codes;
}
public byte[] getBytes(int len){
if (pos + len >= codes.length) {
throw new ArrayIndexOutOfBoundsException();
}
byte[] data = Arrays.copyOfRange(codes, pos, pos + len);
pos += len;
return data;
}
public String nextU4ToHexString(){
return Util.byteToHexString(new byte[]{codes[pos++],codes[pos++],codes[pos++],codes[pos++]});
}
public int nextU1ToInt(){
return Util.byteToInt(new byte[]{codes[pos++]});
}
public int nextU2ToInt(){
return Util.byteToInt(new byte[]{codes[pos++],codes[pos++]});
}
public int nextU4ToInt(){
return Util.byteToInt(new byte[]{codes[pos++],codes[pos++],codes[pos++],codes[pos++]});
}
public String nextUxToHexString(int len) {
byte[] tmp = new byte[len];
for (int i = 0; i < len; i++) {
tmp[i] = codes[pos++];
}
return Util.byteToHexString(tmp).toLowerCase();
}
public void back(int n) {
this.pos -= n;
}
}