Rabbit-R1/switch port/java/sources/com/google/common/io/CharSequenceReader.java

129 lines
3.6 KiB
Java
Raw Normal View History

2024-05-21 16:08:36 -05:00
package com.google.common.io;
import com.google.common.base.Preconditions;
import java.io.IOException;
import java.io.Reader;
import java.nio.CharBuffer;
import java.util.Objects;
import javax.annotation.CheckForNull;
@ElementTypesAreNonnullByDefault
/* loaded from: classes3.dex */
final class CharSequenceReader extends Reader {
private int mark;
private int pos;
@CheckForNull
private CharSequence seq;
@Override // java.io.Reader
public boolean markSupported() {
return true;
}
public CharSequenceReader(CharSequence charSequence) {
this.seq = (CharSequence) Preconditions.checkNotNull(charSequence);
}
private void checkOpen() throws IOException {
if (this.seq == null) {
throw new IOException("reader closed");
}
}
private boolean hasRemaining() {
return remaining() > 0;
}
private int remaining() {
Objects.requireNonNull(this.seq);
return this.seq.length() - this.pos;
}
@Override // java.io.Reader, java.lang.Readable
public synchronized int read(CharBuffer charBuffer) throws IOException {
Preconditions.checkNotNull(charBuffer);
checkOpen();
Objects.requireNonNull(this.seq);
if (!hasRemaining()) {
return -1;
}
int min = Math.min(charBuffer.remaining(), remaining());
for (int i = 0; i < min; i++) {
CharSequence charSequence = this.seq;
int i2 = this.pos;
this.pos = i2 + 1;
charBuffer.put(charSequence.charAt(i2));
}
return min;
}
@Override // java.io.Reader
public synchronized int read() throws IOException {
char c;
checkOpen();
Objects.requireNonNull(this.seq);
if (hasRemaining()) {
CharSequence charSequence = this.seq;
int i = this.pos;
this.pos = i + 1;
c = charSequence.charAt(i);
} else {
c = 65535;
}
return c;
}
@Override // java.io.Reader
public synchronized int read(char[] cArr, int i, int i2) throws IOException {
Preconditions.checkPositionIndexes(i, i + i2, cArr.length);
checkOpen();
Objects.requireNonNull(this.seq);
if (!hasRemaining()) {
return -1;
}
int min = Math.min(i2, remaining());
for (int i3 = 0; i3 < min; i3++) {
CharSequence charSequence = this.seq;
int i4 = this.pos;
this.pos = i4 + 1;
cArr[i + i3] = charSequence.charAt(i4);
}
return min;
}
@Override // java.io.Reader
public synchronized long skip(long j) throws IOException {
int min;
Preconditions.checkArgument(j >= 0, "n (%s) may not be negative", j);
checkOpen();
min = (int) Math.min(remaining(), j);
this.pos += min;
return min;
}
@Override // java.io.Reader
public synchronized boolean ready() throws IOException {
checkOpen();
return true;
}
@Override // java.io.Reader
public synchronized void mark(int i) throws IOException {
Preconditions.checkArgument(i >= 0, "readAheadLimit (%s) may not be negative", i);
checkOpen();
this.mark = this.pos;
}
@Override // java.io.Reader
public synchronized void reset() throws IOException {
checkOpen();
this.pos = this.mark;
}
@Override // java.io.Reader, java.io.Closeable, java.lang.AutoCloseable
public synchronized void close() throws IOException {
this.seq = null;
}
}