com.zving.framework.thirdparty.asm.ByteVector Maven / Gradle / Ivy
package com.zving.framework.thirdparty.asm;
public class ByteVector {
byte[] data;
int length;
public ByteVector() {
this.data = new byte[64];
}
public ByteVector(int initialSize) {
this.data = new byte[initialSize];
}
public ByteVector putByte(int b) {
int length = this.length;
if (length + 1 > this.data.length) {
enlarge(1);
}
this.data[(length++)] = ((byte) b);
this.length = length;
return this;
}
ByteVector put11(int b1, int b2) {
int length = this.length;
if (length + 2 > this.data.length) {
enlarge(2);
}
byte[] data = this.data;
data[(length++)] = ((byte) b1);
data[(length++)] = ((byte) b2);
this.length = length;
return this;
}
public ByteVector putShort(int s) {
int length = this.length;
if (length + 2 > this.data.length) {
enlarge(2);
}
byte[] data = this.data;
data[(length++)] = ((byte) (s >>> 8));
data[(length++)] = ((byte) s);
this.length = length;
return this;
}
ByteVector put12(int b, int s) {
int length = this.length;
if (length + 3 > this.data.length) {
enlarge(3);
}
byte[] data = this.data;
data[(length++)] = ((byte) b);
data[(length++)] = ((byte) (s >>> 8));
data[(length++)] = ((byte) s);
this.length = length;
return this;
}
public ByteVector putInt(int i) {
int length = this.length;
if (length + 4 > this.data.length) {
enlarge(4);
}
byte[] data = this.data;
data[(length++)] = ((byte) (i >>> 24));
data[(length++)] = ((byte) (i >>> 16));
data[(length++)] = ((byte) (i >>> 8));
data[(length++)] = ((byte) i);
this.length = length;
return this;
}
public ByteVector putLong(long l) {
int length = this.length;
if (length + 8 > this.data.length) {
enlarge(8);
}
byte[] data = this.data;
int i = (int) (l >>> 32);
data[(length++)] = ((byte) (i >>> 24));
data[(length++)] = ((byte) (i >>> 16));
data[(length++)] = ((byte) (i >>> 8));
data[(length++)] = ((byte) i);
i = (int) l;
data[(length++)] = ((byte) (i >>> 24));
data[(length++)] = ((byte) (i >>> 16));
data[(length++)] = ((byte) (i >>> 8));
data[(length++)] = ((byte) i);
this.length = length;
return this;
}
public ByteVector putUTF8(String s) {
int charLength = s.length();
int len = this.length;
if (len + 2 + charLength > this.data.length) {
enlarge(2 + charLength);
}
byte[] data = this.data;
data[(len++)] = ((byte) (charLength >>> 8));
data[(len++)] = ((byte) charLength);
for (int i = 0; i < charLength; i++) {
char c = s.charAt(i);
if ((c >= '\001') && (c <= '')) {
data[(len++)] = ((byte) c);
} else {
int byteLength = i;
for (int j = i; j < charLength; j++) {
c = s.charAt(j);
if ((c >= '\001') && (c <= '')) {
byteLength++;
} else if (c > '߿') {
byteLength += 3;
} else {
byteLength += 2;
}
}
data[this.length] = ((byte) (byteLength >>> 8));
data[(this.length + 1)] = ((byte) byteLength);
if (this.length + 2 + byteLength > data.length) {
this.length = len;
enlarge(2 + byteLength);
data = this.data;
}
for (int j = i; j < charLength; j++) {
c = s.charAt(j);
if ((c >= '\001') && (c <= '')) {
data[(len++)] = ((byte) c);
} else if (c > '߿') {
data[(len++)] = ((byte) (0xE0 | c >> '\f' & 0xF));
data[(len++)] = ((byte) (0x80 | c >> '\006' & 0x3F));
data[(len++)] = ((byte) (0x80 | c & 0x3F));
} else {
data[(len++)] = ((byte) (0xC0 | c >> '\006' & 0x1F));
data[(len++)] = ((byte) (0x80 | c & 0x3F));
}
}
break;
}
}
this.length = len;
return this;
}
public ByteVector putByteArray(byte[] b, int off, int len) {
if (this.length + len > this.data.length) {
enlarge(len);
}
if (b != null) {
System.arraycopy(b, off, this.data, this.length, len);
}
this.length += len;
return this;
}
private void enlarge(int size) {
int length1 = 2 * this.data.length;
int length2 = this.length + size;
byte[] newData = new byte[length1 > length2 ? length1 : length2];
System.arraycopy(this.data, 0, newData, 0, this.length);
this.data = newData;
}
}