Pakman
SweepControllerStatic.cc
1 #include <string>
2 #include <fstream>
3 
4 #include "core/common.h"
5 #include "core/LongOptions.h"
6 #include "core/Arguments.h"
7 #include "core/Command.h"
8 #include "interface/input.h"
9 
10 #include "SweepController.h"
11 
12 // Static help function
13 std::string SweepController::help()
14 {
15  return
16 R"(* Help message for 'sweep' controller *
17 
18 Description:
19  The sweep method interprets the stdout of 'generator' as newline-separated
20  list of parameters and runs 'simulator' on each of them.
21 
22  Upon completion, the controller outputs the parameter names, followed by
23  newline-separated list of simulated parameters.
24 
25 Required arguments:
26  -P, --parameter-names=NAMES NAMES is a comma-separated list of
27  parameter names
28  -S, --simulator=CMD CMD is simulator command
29  -G, --generator=CMD CMD is generator command
30 )";
31 }
32 
34 {
35  lopts.add({"parameter-names", required_argument, nullptr, 'P'});
36  lopts.add({"simulator", required_argument, nullptr, 'S'});
37  lopts.add({"generator", required_argument, nullptr, 'G'});
38 }
39 
41 {
42  Input input_obj;
43 
44  // Parse command-line options
45  input_obj = Input::makeInput(args);
46 
47  // Make SweepController
48  return new SweepController(input_obj);
49 }
50 
51 // Construct Input from Arguments object
53 {
54  // Initialize input
55  Input input_obj;
56 
57  try
58  {
59  input_obj.simulator =
60  parse_command(args.optionalArgument("simulator"));
61 
62  input_obj.parameter_names =
63  parse_parameter_names(args.optionalArgument("parameter-names"));
64 
65  input_obj.generator =
66  parse_command(args.optionalArgument("generator"));
67  }
68  catch (const std::out_of_range& e)
69  {
70  std::string error_msg;
71  error_msg += "One or more arguments missing, try '";
72  error_msg += g_program_name;
73  error_msg += " sweep --help' for more info";
74  throw std::runtime_error(error_msg);
75  }
76 
77  return input_obj;
78 }
static std::string help()
static Input makeInput(const Arguments &args)
Command parse_command(const std::string &raw_input)
Definition: input.cc:19
SweepController(const Input &input_obj)
static SweepController * makeController(const Arguments &args)
const char * g_program_name
Definition: main.cc:22
std::vector< ParameterName > parameter_names
std::vector< ParameterName > parse_parameter_names(const std::string &raw_input)
Definition: input.cc:42
static void addLongOptions(LongOptions &lopts)
void add(struct option long_opt)
Definition: LongOptions.cc:20
std::string optionalArgument(const std::string &option_name) const
Definition: Arguments.cc:45