Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package io.deephaven.csv.parsers;
import io.deephaven.csv.sinks.Sink;
import io.deephaven.csv.sinks.Source;
import io.deephaven.csv.tokenization.Tokenizer;
import io.deephaven.csv.util.CsvReaderException;
import io.deephaven.csv.util.MutableLong;
import io.deephaven.csv.util.MutableObject;
import org.jetbrains.annotations.NotNull;
/** The parser for the long type. */
public final class LongParser implements Parser {
public static final LongParser INSTANCE = new LongParser();
private LongParser() {}
@NotNull
@Override
public ParserContext makeParserContext(final GlobalContext gctx, final int chunkSize) {
final MutableObject> sourceHolder = new MutableObject<>();
final Sink sink = gctx.sinkFactory.forLong(sourceHolder);
return new ParserContext<>(sink, sourceHolder.getValue(), new long[chunkSize]);
}
@Override
public long tryParse(
final GlobalContext gctx,
final ParserContext pctx,
IteratorHolder ih,
final long begin,
final long end,
final boolean appending)
throws CsvReaderException {
final MutableLong longHolder = new MutableLong();
final Tokenizer t = gctx.tokenizer;
final boolean[] nulls = gctx.nullChunk();
final Sink sink = pctx.sink();
final Long reservedValue = gctx.sinkFactory.reservedLong();
final long[] values = pctx.valueChunk();
long current = begin;
int chunkIndex = 0;
do {
if (chunkIndex == values.length) {
sink.write(values, nulls, current, current + chunkIndex, appending);
current += chunkIndex;
chunkIndex = 0;
}
if (current + chunkIndex == end) {
break;
}
if (gctx.isNullCell(ih)) {
nulls[chunkIndex++] = true;
continue;
}
if (!t.tryParseLong(ih.bs(), longHolder)) {
break;
}
final long value = longHolder.longValue();
if (reservedValue != null && value == reservedValue) {
// If a reserved value is defined, it must not be present in the input.
break;
}
if (ih.bs().size() > 1) {
gctx.isNullOrWidthOneSoFar = false;
}
values[chunkIndex] = value;
nulls[chunkIndex] = false;
++chunkIndex;
} while (ih.tryMoveNext());
sink.write(values, nulls, current, current + chunkIndex, appending);
return current + chunkIndex;
}
}