Snowman  0.1.0
snowboy-options.h
1 #pragma once
2 #include <cstdint>
3 #include <map>
4 #include <string>
5 #include <vector>
6 
7 namespace snowboy {
8  struct OptionsItf {
9  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, bool* ptr) = 0;
10  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, int32_t* ptr) = 0;
11  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, uint32_t* ptr) = 0;
12  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, int64_t* ptr) = 0;
13  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, uint64_t* ptr) = 0;
14  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, float* ptr) = 0;
15  virtual void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, std::string* ptr) = 0;
16  virtual void Remove(const std::string& prefix, const std::string& name) = 0;
17  virtual ~OptionsItf() {}
18  };
19 
20  struct OptionInfo;
21  class ParseOptions : public OptionsItf {
22  bool m_opt_print_usage;
23  std::string m_opt_config_file;
24  std::string m_usage;
25  std::vector<std::string> m_arguments;
26  std::map<std::string, OptionInfo> m_options;
27  int m_verbose_level;
28 
29  void Register(const std::string& prefix, const std::string& name, const std::string usage_info, OptionInfo&& info);
30 
31  public:
32  ParseOptions(const std::string& usage);
33  ~ParseOptions();
34 
35  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, bool* ptr) override;
36  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, int32_t* ptr) override;
37  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, uint32_t* ptr) override;
38  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, int64_t* ptr) override;
39  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, uint64_t* ptr) override;
40  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, float* ptr) override;
41  void Register(const std::string& prefix, const std::string& name, const std::string& usage_info, std::string* ptr) override;
42  void Remove(const std::string& prefix, const std::string& name) override;
43 
44  std::string GetArgument(size_t index) const;
45  bool IsValidOption(const std::string& opt) const;
46  std::string NormalizeOptionName(const std::string& option) const;
47  void ParseOneOption(const std::string& opt, std::string* out_name, std::string* out_value) const;
48  void PrintUsage(bool);
49  void ReadArguments(int argc, char const* const* argv);
50  void ReadConfigFile(const std::string& filename);
51  void ReadConfigString(const std::string& config);
52  };
53 } // namespace snowboy
Definition: snowboy-options.h:21
Definition: snowboy-options.cpp:7
Definition: snowboy-options.h:8