package water.parser;
import water.Job;
import water.Key;
import water.fvec.ByteVec;
import water.fvec.Vec;
/**
* Generic Parser provider.
*/
public abstract class ParserProvider {
/** Technical information for this parser */
public abstract ParserInfo info();
/** Create a new parser
*/
public abstract Parser createParser(ParseSetup setup, Key<Job> jobKey);
/** Returns parser setup of throws exception if input is not recognized */
// FIXME: should be more flexible
public abstract ParseSetup guessSetup(ByteVec v, byte[] bits, byte sep, int ncols, boolean singleQuotes, int checkHeader, String[] columnNames, byte[] columnTypes, String[][] domains, String[][] naStrings );
/** Create a parser specific setup.
*
* Useful if parser need a single
* @param inputs input keys
* @param requiredSetup user given parser setup
* @return parser specific setup
*/
public abstract ParseSetup createParserSetup(Key[] inputs, ParseSetup requiredSetup);
/**
* Executed exactly once per-file-per-node during parse.
* Do any file-related non-distributed setup here. E.g. ORC reader creates node-shared instance of a (non-serializable) Reader.
* @param v
* @param setup
*/
public ParseSetup setupLocal(Vec v, ParseSetup setup){ return setup;}
}