X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Foptions.ml;h=cec31bc6b91f364af7a8a32f06738094d31f5549;hb=689b47b109dc54a78008f589f2c55f98672ab61d;hp=07f8ffb69547e9d31f7eb0d3ee8d481632688974;hpb=7b4efbdf1b9e4e972f2b1d3c3c5c69235f7a964a;p=SXSI%2Fxpathcomp.git diff --git a/src/options.ml b/src/options.ml index 07f8ffb..cec31bc 100644 --- a/src/options.ml +++ b/src/options.ml @@ -1,3 +1,6 @@ +open Utils +open Format + let index_empty_texts = ref false let sample_factor = ref 64 let disable_text_collection = ref false @@ -13,6 +16,9 @@ let bottom_up = ref false let no_jump = ref false let verbose = ref false let text_index_type = ref 0 +let do_perf = ref false +let twopass = ref false +let repeat = ref 1 let set_index_type = function | "default" -> text_index_type := 0 @@ -22,7 +28,6 @@ let set_index_type = function let usage_msg = Printf.sprintf "%s [options] 'query' [output]" Sys.argv.(0) - let pos = ref 0 let anon_fun = fun s -> match !pos with @@ -31,10 +36,34 @@ let anon_fun = | 2 -> output_file := Some s; incr pos | _ -> raise (Arg.Bad(s)) +let set_logger s = + List.iter (fun t -> + if t = "" then () + else + match String.explode t ':' with + [ tr; lvl ] -> + let l = try int_of_string lvl with _ -> raise (Arg.Bad (lvl)) in + if Logger.is_logger tr then Logger.activate tr l + else raise (Arg.Bad (t)) + | _ -> raise (Arg.Bad (t)) + ) (String.explode s ',') + +let pretty_loggers () = + ignore(flush_str_formatter()); + Pretty.print_list + ~sep:", " + (fun f s -> fprintf f "%s" s) + str_formatter + (Logger.available ()); + flush_str_formatter () + let spec = Arg.align [ "-c", Arg.Set(count_only), " counting only (don't materialize the result set)"; + "-two", Arg.Set(twopass), + " Use twopass algorithm"; + "-f", Arg.Set_int(sample_factor), " sample factor [default=64]"; @@ -51,12 +80,27 @@ let spec = Arg.align "-nj", Arg.Set(no_jump), " disable jumping"; + "-p", Arg.Set(do_perf), " dump perf counters (Linux only)"; + "-index-type", Arg.Symbol ([ "default"; "swcsa"; "rlcsa" ], - set_index_type), + set_index_type), " choose text index type"; - "-v", Arg.Set(verbose), " verbose mode"; - ] + "-r", Arg.Set_int(repeat), + " repeat query execution n time (benchmarking only, default 1)"; + + + + "-v", Arg.Set(verbose), " verbose mode"; ] @ +IFNDEF NTRACE +THEN [ + "-log", Arg.String (set_logger), + " enable logging with the specified level. Valid loggers are: " + ^ (pretty_loggers ()) + ] +ELSE [] +END + let parse_cmdline() = let _ = Arg.parse spec anon_fun usage_msg