c303c8000dfc6bfb9d94ca0e84e14c5d38ca7b24
[tatoo.git] / src / options.ml
1 open Arg
2
3 let count = ref false
4 let input_file : string option ref = ref None
5 let output_file : string option ref = ref None
6 let queries = ref []
7 let stats = ref false
8 let compose = ref false
9 let parallel = ref false
10 let supported_models = [ "naive", (module Naive_tree : Tree.S);
11                          "compact",(module Compact_tree : Tree.S);
12                        ]
13 let tree_model = ref  (fst (List.hd supported_models))
14 let set_model s = tree_model := s
15
16 let set_string_option r s = r := Some s
17
18 let specs = align [
19   "-c", Set count,
20         "  write the number of results only";
21   "--count", Set count, " ";
22   "-s", Set stats,
23         "  display timing and various statistics";
24   "--stats", Set stats, " ";
25   "-d", String (set_string_option input_file),
26         "  specify the input document file [default stdin]";
27   "--doc", String (set_string_option input_file), " ";
28   "-o", String (set_string_option output_file),
29         "  specify the output file [default stdout]";
30   "--out", String (set_string_option output_file), " ";
31   "-C", Set compose,
32         "  compose queries: each query is applied to the results of the \
33 previous one [default run all queries from the root node]";
34   "--compose", Set compose, " ";
35   "-p", Set parallel,
36         "  run all queries in parallel [default run all queries \
37 sequentially]";
38   "--parallel", Set parallel, " ";
39   "-m", Symbol (List.map fst supported_models, set_model),
40   "  specify tree model (naive or compact, default to naive)";
41   "--model", Symbol (List.map fst supported_models, set_model), " ";
42 ]
43
44 let usage_msg =
45   Printf.sprintf "usage: %s [options] query [query ... query]" Sys.argv.(0)
46
47 let usage () = usage specs usage_msg
48
49 let parse () =
50   parse specs (fun q -> queries := q :: !queries ) usage_msg;
51   match !queries with
52     [] -> raise (Arg.Bad "missing query")
53   | l -> queries := List.rev l