mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-26 09:02:34 -06:00
895 lines
30 KiB
Java
895 lines
30 KiB
Java
|
package com.alibaba.fastjson.serializer;
|
||
|
|
||
|
import com.alibaba.fastjson.JSON;
|
||
|
import com.alibaba.fastjson.JSONException;
|
||
|
import com.alibaba.fastjson.parser.JSONLexer;
|
||
|
import com.google.android.exoplayer2.C;
|
||
|
import java.io.IOException;
|
||
|
import java.io.OutputStream;
|
||
|
import java.io.UnsupportedEncodingException;
|
||
|
import java.io.Writer;
|
||
|
import java.nio.charset.Charset;
|
||
|
import kotlin.text.Typography;
|
||
|
|
||
|
/* loaded from: classes2.dex */
|
||
|
public final class SerializeWriter extends Writer {
|
||
|
public static final char[] DIGITS;
|
||
|
static final byte[] specicalFlags_doubleQuotes;
|
||
|
static final byte[] specicalFlags_singleQuotes;
|
||
|
protected char[] buf;
|
||
|
protected int count;
|
||
|
protected int features;
|
||
|
protected final Writer writer;
|
||
|
private static final ThreadLocal<char[]> bufLocal = new ThreadLocal<>();
|
||
|
static final int[] sizeTable = {9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE};
|
||
|
static final char[] digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
|
||
|
static final char[] DigitTens = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', '9', '9', '9', '9', '9', '9', '9', '9', '9', '9'};
|
||
|
static final char[] DigitOnes = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
|
||
|
static final char[] ascii_chars = {'0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '0', 'A', '0', 'B', '0', 'C', '0', 'D', '0', 'E', '0', 'F', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '1', 'A', '1', 'B', '1', 'C', '1', 'D', '1', 'E', '1', 'F', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '2', 'A', '2', 'B', '2', 'C', '2', 'D', '2', 'E', '2', 'F'};
|
||
|
static final char[] replaceChars = new char[93];
|
||
|
|
||
|
static {
|
||
|
byte[] bArr = new byte[161];
|
||
|
specicalFlags_doubleQuotes = bArr;
|
||
|
byte[] bArr2 = new byte[161];
|
||
|
specicalFlags_singleQuotes = bArr2;
|
||
|
bArr[0] = 4;
|
||
|
bArr[1] = 4;
|
||
|
bArr[2] = 4;
|
||
|
bArr[3] = 4;
|
||
|
bArr[4] = 4;
|
||
|
bArr[5] = 4;
|
||
|
bArr[6] = 4;
|
||
|
bArr[7] = 4;
|
||
|
bArr[8] = 1;
|
||
|
bArr[9] = 1;
|
||
|
bArr[10] = 1;
|
||
|
bArr[11] = 4;
|
||
|
bArr[12] = 1;
|
||
|
bArr[13] = 1;
|
||
|
bArr[34] = 1;
|
||
|
bArr[92] = 1;
|
||
|
bArr2[0] = 4;
|
||
|
bArr2[1] = 4;
|
||
|
bArr2[2] = 4;
|
||
|
bArr2[3] = 4;
|
||
|
bArr2[4] = 4;
|
||
|
bArr2[5] = 4;
|
||
|
bArr2[6] = 4;
|
||
|
bArr2[7] = 4;
|
||
|
bArr2[8] = 1;
|
||
|
bArr2[9] = 1;
|
||
|
bArr2[10] = 1;
|
||
|
bArr2[11] = 4;
|
||
|
bArr2[12] = 1;
|
||
|
bArr2[13] = 1;
|
||
|
bArr2[92] = 1;
|
||
|
bArr2[39] = 1;
|
||
|
for (int i = 14; i <= 31; i++) {
|
||
|
specicalFlags_doubleQuotes[i] = 4;
|
||
|
specicalFlags_singleQuotes[i] = 4;
|
||
|
}
|
||
|
for (int i2 = 127; i2 < 160; i2++) {
|
||
|
specicalFlags_doubleQuotes[i2] = 4;
|
||
|
specicalFlags_singleQuotes[i2] = 4;
|
||
|
}
|
||
|
char[] cArr = replaceChars;
|
||
|
cArr[0] = '0';
|
||
|
cArr[1] = '1';
|
||
|
cArr[2] = '2';
|
||
|
cArr[3] = '3';
|
||
|
cArr[4] = '4';
|
||
|
cArr[5] = '5';
|
||
|
cArr[6] = '6';
|
||
|
cArr[7] = '7';
|
||
|
cArr[8] = 'b';
|
||
|
cArr[9] = 't';
|
||
|
cArr[10] = 'n';
|
||
|
cArr[11] = 'v';
|
||
|
cArr[12] = 'f';
|
||
|
cArr[13] = 'r';
|
||
|
cArr[34] = Typography.quote;
|
||
|
cArr[39] = '\'';
|
||
|
cArr[47] = '/';
|
||
|
cArr[92] = '\\';
|
||
|
DIGITS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: 'this' call moved to the top of the method (can break code semantics) */
|
||
|
public SerializeWriter() {
|
||
|
this((Writer) null);
|
||
|
}
|
||
|
|
||
|
public SerializeWriter(Writer writer) {
|
||
|
this.writer = writer;
|
||
|
this.features = JSON.DEFAULT_GENERATE_FEATURE;
|
||
|
ThreadLocal<char[]> threadLocal = bufLocal;
|
||
|
this.buf = threadLocal.get();
|
||
|
if (threadLocal != null) {
|
||
|
threadLocal.set(null);
|
||
|
}
|
||
|
if (this.buf == null) {
|
||
|
this.buf = new char[1024];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SerializeWriter(SerializerFeature... serializerFeatureArr) {
|
||
|
this(null, 0, serializerFeatureArr);
|
||
|
}
|
||
|
|
||
|
public SerializeWriter(Writer writer, int i, SerializerFeature[] serializerFeatureArr) {
|
||
|
this.writer = writer;
|
||
|
ThreadLocal<char[]> threadLocal = bufLocal;
|
||
|
char[] cArr = threadLocal.get();
|
||
|
this.buf = cArr;
|
||
|
if (cArr != null) {
|
||
|
threadLocal.set(null);
|
||
|
}
|
||
|
if (this.buf == null) {
|
||
|
this.buf = new char[1024];
|
||
|
}
|
||
|
for (SerializerFeature serializerFeature : serializerFeatureArr) {
|
||
|
i |= serializerFeature.mask;
|
||
|
}
|
||
|
this.features = i;
|
||
|
}
|
||
|
|
||
|
public SerializeWriter(int i) {
|
||
|
this(null, i);
|
||
|
}
|
||
|
|
||
|
public SerializeWriter(Writer writer, int i) {
|
||
|
this.writer = writer;
|
||
|
if (i <= 0) {
|
||
|
throw new IllegalArgumentException("Negative initial size: " + i);
|
||
|
}
|
||
|
this.buf = new char[i];
|
||
|
}
|
||
|
|
||
|
public void config(SerializerFeature serializerFeature, boolean z) {
|
||
|
if (z) {
|
||
|
this.features = serializerFeature.mask | this.features;
|
||
|
} else {
|
||
|
this.features = (~serializerFeature.mask) & this.features;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isEnabled(SerializerFeature serializerFeature) {
|
||
|
return (this.features & serializerFeature.mask) != 0;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer
|
||
|
public void write(int i) {
|
||
|
int i2 = 1;
|
||
|
int i3 = this.count + 1;
|
||
|
if (i3 > this.buf.length) {
|
||
|
if (this.writer == null) {
|
||
|
expandCapacity(i3);
|
||
|
} else {
|
||
|
flush();
|
||
|
this.buf[this.count] = (char) i;
|
||
|
this.count = i2;
|
||
|
}
|
||
|
}
|
||
|
i2 = i3;
|
||
|
this.buf[this.count] = (char) i;
|
||
|
this.count = i2;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer
|
||
|
public void write(char[] cArr, int i, int i2) {
|
||
|
int i3;
|
||
|
if (i < 0 || i > cArr.length || i2 < 0 || (i3 = i + i2) > cArr.length || i3 < 0) {
|
||
|
throw new IndexOutOfBoundsException();
|
||
|
}
|
||
|
if (i2 == 0) {
|
||
|
return;
|
||
|
}
|
||
|
int i4 = this.count + i2;
|
||
|
if (i4 > this.buf.length) {
|
||
|
if (this.writer == null) {
|
||
|
expandCapacity(i4);
|
||
|
}
|
||
|
do {
|
||
|
char[] cArr2 = this.buf;
|
||
|
int length = cArr2.length;
|
||
|
int i5 = this.count;
|
||
|
int i6 = length - i5;
|
||
|
System.arraycopy(cArr, i, cArr2, i5, i6);
|
||
|
this.count = this.buf.length;
|
||
|
flush();
|
||
|
i2 -= i6;
|
||
|
i += i6;
|
||
|
} while (i2 > this.buf.length);
|
||
|
i4 = i2;
|
||
|
}
|
||
|
System.arraycopy(cArr, i, this.buf, this.count, i2);
|
||
|
this.count = i4;
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||
|
public void expandCapacity(int i) {
|
||
|
char[] cArr = this.buf;
|
||
|
int length = ((cArr.length * 3) / 2) + 1;
|
||
|
if (length >= i) {
|
||
|
i = length;
|
||
|
}
|
||
|
char[] cArr2 = new char[i];
|
||
|
System.arraycopy(cArr, 0, cArr2, 0, this.count);
|
||
|
this.buf = cArr2;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer
|
||
|
public void write(String str, int i, int i2) {
|
||
|
int i3;
|
||
|
int i4 = this.count + i2;
|
||
|
if (i4 > this.buf.length) {
|
||
|
if (this.writer == null) {
|
||
|
expandCapacity(i4);
|
||
|
} else {
|
||
|
while (true) {
|
||
|
char[] cArr = this.buf;
|
||
|
int length = cArr.length;
|
||
|
int i5 = this.count;
|
||
|
int i6 = length - i5;
|
||
|
i3 = i + i6;
|
||
|
str.getChars(i, i3, cArr, i5);
|
||
|
this.count = this.buf.length;
|
||
|
flush();
|
||
|
i2 -= i6;
|
||
|
if (i2 <= this.buf.length) {
|
||
|
break;
|
||
|
} else {
|
||
|
i = i3;
|
||
|
}
|
||
|
}
|
||
|
i4 = i2;
|
||
|
i = i3;
|
||
|
}
|
||
|
}
|
||
|
str.getChars(i, i2 + i, this.buf, this.count);
|
||
|
this.count = i4;
|
||
|
}
|
||
|
|
||
|
public void writeTo(Writer writer) throws IOException {
|
||
|
if (this.writer != null) {
|
||
|
throw new UnsupportedOperationException("writer not null");
|
||
|
}
|
||
|
writer.write(this.buf, 0, this.count);
|
||
|
}
|
||
|
|
||
|
public void writeTo(OutputStream outputStream, String str) throws IOException {
|
||
|
writeTo(outputStream, Charset.forName(str));
|
||
|
}
|
||
|
|
||
|
public void writeTo(OutputStream outputStream, Charset charset) throws IOException {
|
||
|
if (this.writer != null) {
|
||
|
throw new UnsupportedOperationException("writer not null");
|
||
|
}
|
||
|
outputStream.write(new String(this.buf, 0, this.count).getBytes(charset.name()));
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer, java.lang.Appendable
|
||
|
public SerializeWriter append(CharSequence charSequence) {
|
||
|
String charSequence2 = charSequence == null ? "null" : charSequence.toString();
|
||
|
write(charSequence2, 0, charSequence2.length());
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer, java.lang.Appendable
|
||
|
public SerializeWriter append(CharSequence charSequence, int i, int i2) {
|
||
|
if (charSequence == null) {
|
||
|
charSequence = "null";
|
||
|
}
|
||
|
String charSequence2 = charSequence.subSequence(i, i2).toString();
|
||
|
write(charSequence2, 0, charSequence2.length());
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer, java.lang.Appendable
|
||
|
public SerializeWriter append(char c) {
|
||
|
write(c);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public byte[] toBytes(String str) {
|
||
|
if (this.writer != null) {
|
||
|
throw new UnsupportedOperationException("writer not null");
|
||
|
}
|
||
|
if (str == null) {
|
||
|
str = C.UTF8_NAME;
|
||
|
}
|
||
|
try {
|
||
|
return new String(this.buf, 0, this.count).getBytes(str);
|
||
|
} catch (UnsupportedEncodingException e) {
|
||
|
throw new JSONException("toBytes error", e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public String toString() {
|
||
|
return new String(this.buf, 0, this.count);
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer, java.io.Closeable, java.lang.AutoCloseable
|
||
|
public void close() {
|
||
|
if (this.writer != null && this.count > 0) {
|
||
|
flush();
|
||
|
}
|
||
|
char[] cArr = this.buf;
|
||
|
if (cArr.length <= 8192) {
|
||
|
bufLocal.set(cArr);
|
||
|
}
|
||
|
this.buf = null;
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer
|
||
|
public void write(String str) {
|
||
|
if (str == null) {
|
||
|
writeNull();
|
||
|
} else {
|
||
|
write(str, 0, str.length());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void writeInt(int i) {
|
||
|
if (i == Integer.MIN_VALUE) {
|
||
|
write("-2147483648");
|
||
|
return;
|
||
|
}
|
||
|
int i2 = 0;
|
||
|
while ((i < 0 ? -i : i) > sizeTable[i2]) {
|
||
|
i2++;
|
||
|
}
|
||
|
int i3 = i2 + 1;
|
||
|
if (i < 0) {
|
||
|
i3 = i2 + 2;
|
||
|
}
|
||
|
int i4 = this.count + i3;
|
||
|
if (i4 > this.buf.length) {
|
||
|
if (this.writer == null) {
|
||
|
expandCapacity(i4);
|
||
|
} else {
|
||
|
char[] cArr = new char[i3];
|
||
|
getChars(i, i3, cArr);
|
||
|
write(cArr, 0, i3);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
getChars(i, i4, this.buf);
|
||
|
this.count = i4;
|
||
|
}
|
||
|
|
||
|
public void writeByteArray(byte[] bArr) {
|
||
|
int length = bArr.length;
|
||
|
boolean z = (this.features & SerializerFeature.UseSingleQuotes.mask) != 0;
|
||
|
char c = z ? '\'' : Typography.quote;
|
||
|
if (length == 0) {
|
||
|
write(z ? "''" : "\"\"");
|
||
|
return;
|
||
|
}
|
||
|
char[] cArr = JSONLexer.CA;
|
||
|
int i = (length / 3) * 3;
|
||
|
int i2 = length - 1;
|
||
|
int i3 = this.count;
|
||
|
int i4 = (((i2 / 3) + 1) << 2) + i3;
|
||
|
int i5 = i4 + 2;
|
||
|
if (i5 > this.buf.length) {
|
||
|
if (this.writer != null) {
|
||
|
write(c);
|
||
|
int i6 = 0;
|
||
|
while (i6 < i) {
|
||
|
int i7 = i6 + 2;
|
||
|
int i8 = ((bArr[i6 + 1] & 255) << 8) | ((bArr[i6] & 255) << 16);
|
||
|
i6 += 3;
|
||
|
int i9 = i8 | (bArr[i7] & 255);
|
||
|
write(cArr[(i9 >>> 18) & 63]);
|
||
|
write(cArr[(i9 >>> 12) & 63]);
|
||
|
write(cArr[(i9 >>> 6) & 63]);
|
||
|
write(cArr[i9 & 63]);
|
||
|
}
|
||
|
int i10 = length - i;
|
||
|
if (i10 > 0) {
|
||
|
int i11 = ((bArr[i] & 255) << 10) | (i10 == 2 ? (bArr[i2] & 255) << 2 : 0);
|
||
|
write(cArr[i11 >> 12]);
|
||
|
write(cArr[(i11 >>> 6) & 63]);
|
||
|
write(i10 == 2 ? cArr[i11 & 63] : '=');
|
||
|
write(61);
|
||
|
}
|
||
|
write(c);
|
||
|
return;
|
||
|
}
|
||
|
expandCapacity(i5);
|
||
|
}
|
||
|
this.count = i5;
|
||
|
int i12 = i3 + 1;
|
||
|
this.buf[i3] = c;
|
||
|
int i13 = 0;
|
||
|
while (i13 < i) {
|
||
|
int i14 = i13 + 2;
|
||
|
int i15 = ((bArr[i13 + 1] & 255) << 8) | ((bArr[i13] & 255) << 16);
|
||
|
i13 += 3;
|
||
|
int i16 = i15 | (bArr[i14] & 255);
|
||
|
char[] cArr2 = this.buf;
|
||
|
cArr2[i12] = cArr[(i16 >>> 18) & 63];
|
||
|
cArr2[i12 + 1] = cArr[(i16 >>> 12) & 63];
|
||
|
int i17 = i12 + 3;
|
||
|
cArr2[i12 + 2] = cArr[(i16 >>> 6) & 63];
|
||
|
i12 += 4;
|
||
|
cArr2[i17] = cArr[i16 & 63];
|
||
|
}
|
||
|
int i18 = length - i;
|
||
|
if (i18 > 0) {
|
||
|
int i19 = ((bArr[i] & 255) << 10) | (i18 == 2 ? (bArr[i2] & 255) << 2 : 0);
|
||
|
char[] cArr3 = this.buf;
|
||
|
cArr3[i4 - 3] = cArr[i19 >> 12];
|
||
|
cArr3[i4 - 2] = cArr[(i19 >>> 6) & 63];
|
||
|
cArr3[i4 - 1] = i18 == 2 ? cArr[i19 & 63] : '=';
|
||
|
cArr3[i4] = '=';
|
||
|
}
|
||
|
this.buf[i4 + 1] = c;
|
||
|
}
|
||
|
|
||
|
public void writeLong(long j) {
|
||
|
if (j == Long.MIN_VALUE) {
|
||
|
write("-9223372036854775808");
|
||
|
return;
|
||
|
}
|
||
|
long j2 = j < 0 ? -j : j;
|
||
|
int i = 1;
|
||
|
long j3 = 10;
|
||
|
while (true) {
|
||
|
if (i >= 19) {
|
||
|
i = 0;
|
||
|
break;
|
||
|
} else {
|
||
|
if (j2 < j3) {
|
||
|
break;
|
||
|
}
|
||
|
j3 *= 10;
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
int i2 = i != 0 ? i : 19;
|
||
|
if (j < 0) {
|
||
|
i2++;
|
||
|
}
|
||
|
int i3 = this.count + i2;
|
||
|
if (i3 > this.buf.length) {
|
||
|
if (this.writer == null) {
|
||
|
expandCapacity(i3);
|
||
|
} else {
|
||
|
char[] cArr = new char[i2];
|
||
|
getChars(j, i2, cArr);
|
||
|
write(cArr, 0, i2);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
getChars(j, i3, this.buf);
|
||
|
this.count = i3;
|
||
|
}
|
||
|
|
||
|
public void writeNull() {
|
||
|
write("null");
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||
|
/* JADX WARN: Code restructure failed: missing block: B:46:0x0090, code lost:
|
||
|
|
||
|
if (r14 == (-1)) goto L42;
|
||
|
*/
|
||
|
/* JADX WARN: Code restructure failed: missing block: B:47:0x0092, code lost:
|
||
|
|
||
|
r12 = r8;
|
||
|
r14 = r13;
|
||
|
r15 = r14;
|
||
|
*/
|
||
|
/* JADX WARN: Code restructure failed: missing block: B:73:0x00dd, code lost:
|
||
|
|
||
|
if (r14 == (-1)) goto L42;
|
||
|
*/
|
||
|
/*
|
||
|
Code decompiled incorrectly, please refer to instructions dump.
|
||
|
To view partially-correct add '--show-bad-code' argument
|
||
|
*/
|
||
|
public void writeStringWithDoubleQuote(java.lang.String r17, char r18, boolean r19) {
|
||
|
/*
|
||
|
Method dump skipped, instructions count: 585
|
||
|
To view this dump add '--comments-level debug' option
|
||
|
*/
|
||
|
throw new UnsupportedOperationException("Method not decompiled: com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(java.lang.String, char, boolean):void");
|
||
|
}
|
||
|
|
||
|
public void write(boolean z) {
|
||
|
write(z ? "true" : "false");
|
||
|
}
|
||
|
|
||
|
public void writeString(String str) {
|
||
|
if ((this.features & SerializerFeature.UseSingleQuotes.mask) != 0) {
|
||
|
writeStringWithSingleQuote(str);
|
||
|
} else {
|
||
|
writeStringWithDoubleQuote(str, (char) 0, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||
|
public void writeStringWithSingleQuote(String str) {
|
||
|
int i = 0;
|
||
|
if (str == null) {
|
||
|
int i2 = this.count + 4;
|
||
|
if (i2 > this.buf.length) {
|
||
|
expandCapacity(i2);
|
||
|
}
|
||
|
"null".getChars(0, 4, this.buf, this.count);
|
||
|
this.count = i2;
|
||
|
return;
|
||
|
}
|
||
|
int length = str.length();
|
||
|
int i3 = this.count + length + 2;
|
||
|
if (i3 > this.buf.length) {
|
||
|
if (this.writer != null) {
|
||
|
write(39);
|
||
|
while (i < str.length()) {
|
||
|
char charAt = str.charAt(i);
|
||
|
if (charAt <= '\r' || charAt == '\\' || charAt == '\'' || (charAt == '/' && (this.features & SerializerFeature.WriteSlashAsSpecial.mask) != 0)) {
|
||
|
write(92);
|
||
|
write(replaceChars[charAt]);
|
||
|
} else {
|
||
|
write(charAt);
|
||
|
}
|
||
|
i++;
|
||
|
}
|
||
|
write(39);
|
||
|
return;
|
||
|
}
|
||
|
expandCapacity(i3);
|
||
|
}
|
||
|
int i4 = this.count;
|
||
|
int i5 = i4 + 1;
|
||
|
int i6 = i5 + length;
|
||
|
char[] cArr = this.buf;
|
||
|
cArr[i4] = '\'';
|
||
|
str.getChars(0, length, cArr, i5);
|
||
|
this.count = i3;
|
||
|
int i7 = -1;
|
||
|
char c = 0;
|
||
|
for (int i8 = i5; i8 < i6; i8++) {
|
||
|
char c2 = this.buf[i8];
|
||
|
if (c2 <= '\r' || c2 == '\\' || c2 == '\'' || (c2 == '/' && (this.features & SerializerFeature.WriteSlashAsSpecial.mask) != 0)) {
|
||
|
i++;
|
||
|
i7 = i8;
|
||
|
c = c2;
|
||
|
}
|
||
|
}
|
||
|
int i9 = i3 + i;
|
||
|
if (i9 > this.buf.length) {
|
||
|
expandCapacity(i9);
|
||
|
}
|
||
|
this.count = i9;
|
||
|
if (i == 1) {
|
||
|
char[] cArr2 = this.buf;
|
||
|
int i10 = i7 + 1;
|
||
|
System.arraycopy(cArr2, i10, cArr2, i7 + 2, (i6 - i7) - 1);
|
||
|
char[] cArr3 = this.buf;
|
||
|
cArr3[i7] = '\\';
|
||
|
cArr3[i10] = replaceChars[c];
|
||
|
} else if (i > 1) {
|
||
|
char[] cArr4 = this.buf;
|
||
|
int i11 = i7 + 1;
|
||
|
System.arraycopy(cArr4, i11, cArr4, i7 + 2, (i6 - i7) - 1);
|
||
|
char[] cArr5 = this.buf;
|
||
|
cArr5[i7] = '\\';
|
||
|
cArr5[i11] = replaceChars[c];
|
||
|
int i12 = i6 + 1;
|
||
|
for (int i13 = i7 - 1; i13 >= i5; i13--) {
|
||
|
char c3 = this.buf[i13];
|
||
|
if (c3 <= '\r' || c3 == '\\' || c3 == '\'' || (c3 == '/' && (this.features & SerializerFeature.WriteSlashAsSpecial.mask) != 0)) {
|
||
|
char[] cArr6 = this.buf;
|
||
|
int i14 = i13 + 1;
|
||
|
System.arraycopy(cArr6, i14, cArr6, i13 + 2, (i12 - i13) - 1);
|
||
|
char[] cArr7 = this.buf;
|
||
|
cArr7[i13] = '\\';
|
||
|
cArr7[i14] = replaceChars[c3];
|
||
|
i12++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
this.buf[this.count - 1] = '\'';
|
||
|
}
|
||
|
|
||
|
public void writeFieldName(String str, boolean z) {
|
||
|
if ((this.features & SerializerFeature.UseSingleQuotes.mask) != 0) {
|
||
|
if ((this.features & SerializerFeature.QuoteFieldNames.mask) != 0) {
|
||
|
writeStringWithSingleQuote(str);
|
||
|
write(58);
|
||
|
return;
|
||
|
} else {
|
||
|
writeKeyWithSingleQuoteIfHasSpecial(str);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if ((this.features & SerializerFeature.QuoteFieldNames.mask) != 0) {
|
||
|
writeStringWithDoubleQuote(str, ':', z);
|
||
|
} else {
|
||
|
writeKeyWithDoubleQuoteIfHasSpecial(str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void writeKeyWithDoubleQuoteIfHasSpecial(String str) {
|
||
|
int length = str.length();
|
||
|
boolean z = true;
|
||
|
int i = this.count + length + 1;
|
||
|
if (i > this.buf.length) {
|
||
|
if (this.writer != null) {
|
||
|
if (length == 0) {
|
||
|
write(34);
|
||
|
write(34);
|
||
|
write(58);
|
||
|
return;
|
||
|
}
|
||
|
int i2 = 0;
|
||
|
while (true) {
|
||
|
if (i2 >= length) {
|
||
|
z = false;
|
||
|
break;
|
||
|
}
|
||
|
char charAt = str.charAt(i2);
|
||
|
byte[] bArr = specicalFlags_doubleQuotes;
|
||
|
if (charAt < bArr.length && bArr[charAt] != 0) {
|
||
|
break;
|
||
|
} else {
|
||
|
i2++;
|
||
|
}
|
||
|
}
|
||
|
if (z) {
|
||
|
write(34);
|
||
|
}
|
||
|
for (int i3 = 0; i3 < length; i3++) {
|
||
|
char charAt2 = str.charAt(i3);
|
||
|
byte[] bArr2 = specicalFlags_doubleQuotes;
|
||
|
if (charAt2 < bArr2.length && bArr2[charAt2] != 0) {
|
||
|
write(92);
|
||
|
write(replaceChars[charAt2]);
|
||
|
} else {
|
||
|
write(charAt2);
|
||
|
}
|
||
|
}
|
||
|
if (z) {
|
||
|
write(34);
|
||
|
}
|
||
|
write(58);
|
||
|
return;
|
||
|
}
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
if (length == 0) {
|
||
|
int i4 = this.count;
|
||
|
if (i4 + 3 > this.buf.length) {
|
||
|
expandCapacity(i4 + 3);
|
||
|
}
|
||
|
char[] cArr = this.buf;
|
||
|
int i5 = this.count;
|
||
|
cArr[i5] = Typography.quote;
|
||
|
cArr[i5 + 1] = Typography.quote;
|
||
|
this.count = i5 + 3;
|
||
|
cArr[i5 + 2] = ':';
|
||
|
return;
|
||
|
}
|
||
|
int i6 = this.count;
|
||
|
int i7 = i6 + length;
|
||
|
str.getChars(0, length, this.buf, i6);
|
||
|
this.count = i;
|
||
|
int i8 = i6;
|
||
|
boolean z2 = false;
|
||
|
while (i8 < i7) {
|
||
|
char[] cArr2 = this.buf;
|
||
|
char c = cArr2[i8];
|
||
|
byte[] bArr3 = specicalFlags_doubleQuotes;
|
||
|
if (c < bArr3.length && bArr3[c] != 0) {
|
||
|
if (!z2) {
|
||
|
i += 3;
|
||
|
if (i > cArr2.length) {
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
this.count = i;
|
||
|
char[] cArr3 = this.buf;
|
||
|
int i9 = i8 + 1;
|
||
|
System.arraycopy(cArr3, i9, cArr3, i8 + 3, (i7 - i8) - 1);
|
||
|
char[] cArr4 = this.buf;
|
||
|
System.arraycopy(cArr4, 0, cArr4, 1, i8);
|
||
|
char[] cArr5 = this.buf;
|
||
|
cArr5[i6] = Typography.quote;
|
||
|
cArr5[i9] = '\\';
|
||
|
i8 += 2;
|
||
|
cArr5[i8] = replaceChars[c];
|
||
|
i7 += 2;
|
||
|
cArr5[this.count - 2] = Typography.quote;
|
||
|
z2 = true;
|
||
|
} else {
|
||
|
i++;
|
||
|
if (i > cArr2.length) {
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
this.count = i;
|
||
|
char[] cArr6 = this.buf;
|
||
|
int i10 = i8 + 1;
|
||
|
System.arraycopy(cArr6, i10, cArr6, i8 + 2, i7 - i8);
|
||
|
char[] cArr7 = this.buf;
|
||
|
cArr7[i8] = '\\';
|
||
|
cArr7[i10] = replaceChars[c];
|
||
|
i7++;
|
||
|
i8 = i10;
|
||
|
}
|
||
|
}
|
||
|
i8++;
|
||
|
}
|
||
|
this.buf[this.count - 1] = ':';
|
||
|
}
|
||
|
|
||
|
private void writeKeyWithSingleQuoteIfHasSpecial(String str) {
|
||
|
int length = str.length();
|
||
|
boolean z = true;
|
||
|
int i = this.count + length + 1;
|
||
|
if (i > this.buf.length) {
|
||
|
if (this.writer != null) {
|
||
|
if (length == 0) {
|
||
|
write(39);
|
||
|
write(39);
|
||
|
write(58);
|
||
|
return;
|
||
|
}
|
||
|
int i2 = 0;
|
||
|
while (true) {
|
||
|
if (i2 >= length) {
|
||
|
z = false;
|
||
|
break;
|
||
|
}
|
||
|
char charAt = str.charAt(i2);
|
||
|
byte[] bArr = specicalFlags_singleQuotes;
|
||
|
if (charAt < bArr.length && bArr[charAt] != 0) {
|
||
|
break;
|
||
|
} else {
|
||
|
i2++;
|
||
|
}
|
||
|
}
|
||
|
if (z) {
|
||
|
write(39);
|
||
|
}
|
||
|
for (int i3 = 0; i3 < length; i3++) {
|
||
|
char charAt2 = str.charAt(i3);
|
||
|
byte[] bArr2 = specicalFlags_singleQuotes;
|
||
|
if (charAt2 < bArr2.length && bArr2[charAt2] != 0) {
|
||
|
write(92);
|
||
|
write(replaceChars[charAt2]);
|
||
|
} else {
|
||
|
write(charAt2);
|
||
|
}
|
||
|
}
|
||
|
if (z) {
|
||
|
write(39);
|
||
|
}
|
||
|
write(58);
|
||
|
return;
|
||
|
}
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
if (length == 0) {
|
||
|
int i4 = this.count;
|
||
|
if (i4 + 3 > this.buf.length) {
|
||
|
expandCapacity(i4 + 3);
|
||
|
}
|
||
|
char[] cArr = this.buf;
|
||
|
int i5 = this.count;
|
||
|
cArr[i5] = '\'';
|
||
|
cArr[i5 + 1] = '\'';
|
||
|
this.count = i5 + 3;
|
||
|
cArr[i5 + 2] = ':';
|
||
|
return;
|
||
|
}
|
||
|
int i6 = this.count;
|
||
|
int i7 = i6 + length;
|
||
|
str.getChars(0, length, this.buf, i6);
|
||
|
this.count = i;
|
||
|
int i8 = i6;
|
||
|
boolean z2 = false;
|
||
|
while (i8 < i7) {
|
||
|
char[] cArr2 = this.buf;
|
||
|
char c = cArr2[i8];
|
||
|
byte[] bArr3 = specicalFlags_singleQuotes;
|
||
|
if (c < bArr3.length && bArr3[c] != 0) {
|
||
|
if (!z2) {
|
||
|
i += 3;
|
||
|
if (i > cArr2.length) {
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
this.count = i;
|
||
|
char[] cArr3 = this.buf;
|
||
|
int i9 = i8 + 1;
|
||
|
System.arraycopy(cArr3, i9, cArr3, i8 + 3, (i7 - i8) - 1);
|
||
|
char[] cArr4 = this.buf;
|
||
|
System.arraycopy(cArr4, 0, cArr4, 1, i8);
|
||
|
char[] cArr5 = this.buf;
|
||
|
cArr5[i6] = '\'';
|
||
|
cArr5[i9] = '\\';
|
||
|
i8 += 2;
|
||
|
cArr5[i8] = replaceChars[c];
|
||
|
i7 += 2;
|
||
|
cArr5[this.count - 2] = '\'';
|
||
|
z2 = true;
|
||
|
} else {
|
||
|
i++;
|
||
|
if (i > cArr2.length) {
|
||
|
expandCapacity(i);
|
||
|
}
|
||
|
this.count = i;
|
||
|
char[] cArr6 = this.buf;
|
||
|
int i10 = i8 + 1;
|
||
|
System.arraycopy(cArr6, i10, cArr6, i8 + 2, i7 - i8);
|
||
|
char[] cArr7 = this.buf;
|
||
|
cArr7[i8] = '\\';
|
||
|
cArr7[i10] = replaceChars[c];
|
||
|
i7++;
|
||
|
i8 = i10;
|
||
|
}
|
||
|
}
|
||
|
i8++;
|
||
|
}
|
||
|
this.buf[i - 1] = ':';
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Writer, java.io.Flushable
|
||
|
public void flush() {
|
||
|
Writer writer = this.writer;
|
||
|
if (writer == null) {
|
||
|
return;
|
||
|
}
|
||
|
try {
|
||
|
writer.write(this.buf, 0, this.count);
|
||
|
this.writer.flush();
|
||
|
this.count = 0;
|
||
|
} catch (IOException e) {
|
||
|
throw new JSONException(e.getMessage(), e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||
|
public static void getChars(long j, int i, char[] cArr) {
|
||
|
char c;
|
||
|
if (j < 0) {
|
||
|
j = -j;
|
||
|
c = '-';
|
||
|
} else {
|
||
|
c = 0;
|
||
|
}
|
||
|
while (j > 2147483647L) {
|
||
|
long j2 = j / 100;
|
||
|
int i2 = (int) (j - (((j2 << 6) + (j2 << 5)) + (j2 << 2)));
|
||
|
cArr[i - 1] = DigitOnes[i2];
|
||
|
i -= 2;
|
||
|
cArr[i] = DigitTens[i2];
|
||
|
j = j2;
|
||
|
}
|
||
|
int i3 = (int) j;
|
||
|
while (i3 >= 65536) {
|
||
|
int i4 = i3 / 100;
|
||
|
int i5 = i3 - (((i4 << 6) + (i4 << 5)) + (i4 << 2));
|
||
|
cArr[i - 1] = DigitOnes[i5];
|
||
|
i -= 2;
|
||
|
cArr[i] = DigitTens[i5];
|
||
|
i3 = i4;
|
||
|
}
|
||
|
while (true) {
|
||
|
int i6 = (52429 * i3) >>> 19;
|
||
|
int i7 = i - 1;
|
||
|
cArr[i7] = digits[i3 - ((i6 << 3) + (i6 << 1))];
|
||
|
if (i6 == 0) {
|
||
|
break;
|
||
|
}
|
||
|
i3 = i6;
|
||
|
i = i7;
|
||
|
}
|
||
|
if (c != 0) {
|
||
|
cArr[i - 2] = c;
|
||
|
}
|
||
|
}
|
||
|
}
|