return values.tuple(tupleType, rec);
}
private IValue readAndBuild(Reader stream, Type actualType, TypeStore store, RascalExecutionContext rex) throws IOException {
FieldReader reader = new FieldReader(stream, separator);
IWriter result = actualType.isListRelation() ? values.listWriter() : values.setWriter();
boolean first = header;
Type tupleType = actualType.getElementType();
Type[] expectedTypes = new Type[tupleType.getArity()];
for (int i = 0; i < expectedTypes.length; i++) {
expectedTypes[i] = tupleType.getFieldType(i);
}
final String[] currentRecord = new String[expectedTypes.length];
final IValue[] tuple = new IValue[expectedTypes.length];
while (reader.hasRecord()) {
collectFields(reader, currentRecord, rex);
if (first) {
first = false;
continue;
}
parseRecordFields(currentRecord, expectedTypes, store, tuple, true, rex);
if (result instanceof IListWriter) {
((IListWriter)result).append(values.tuple(tuple));
}
else {
result.insert(values.tuple(tuple));
}
}
return result.done();
}