libptpmgmt  1.3
libptpmgmt library that provides the functionality of linuxptp pmc
opt.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-3.0-or-later
2  SPDX-FileCopyrightText: Copyright © 2021 Erez Geva <ErezGeva2@gmail.com> */
3 
12 #ifndef __PTPMGMT_OPT_H
13 #define __PTPMGMT_OPT_H
14 
15 #ifdef __cplusplus
16 #include <map>
17 #include <vector>
18 #include "name.h"
19 #include "buf.h"
20 #ifdef __PTPMGMT_HAVE_GETOPT_H
21 #include <getopt.h>
22 #endif
23 
24 __PTPMGMT_NAMESPACE_BEGIN
25 
29 struct Pmc_option {
34  char short_name;
35  std::string long_name;
36  bool have_arg;
37  bool long_only;
38  std::string help_msg;
39  std::string arg_help;
40  std::string def_val;
41 };
42 
46 class Options
47 {
48  private:
49  static Pmc_option startOptions[];
50  size_t m_max_arg_name;
51  std::vector<option> m_long_opts_list;
52  Buf m_strings;
53  size_t m_last_strings;
54  std::map<int, std::string> m_opts;
55  std::string m_net_opts, m_all_opts, m_all_short_opts, m_with_opts, m_msg;
56  char m_net_select;
57  int m_argc, m_end_optind;
58  bool m_useDef;
59 
60  class helpStore
61  {
62  private:
63  std::string m_start, m_end;
64  public:
65  helpStore(const char *s, const char *e = nullptr): m_start(s) {
66  if(e != nullptr)
67  m_end = e;
68  }
69  helpStore &addStart(const std::string &s) {m_start += s; return *this;}
70  helpStore &addStart(const char s) {m_start += s; return *this;}
71  helpStore &addEnd(const std::string &e) {m_end += e; return *this;}
72  std::string get(size_t length) const;
73  };
74  std::string help;
75  std::vector<helpStore> helpVec;
76  bool helpUpdate;
77 
78  public:
80  enum loop_val {
85  };
90  Options(bool useDef = true);
94  void useDefOption();
101  bool insert(const Pmc_option &opt);
106  const char *get_help();
111  const std::string &get_msg() const { return m_msg; }
116  const char *get_msg_c() const { return m_msg.c_str(); }
140  loop_val parse_options(int argc, char *const argv[]);
146  bool have(char opt) const { return m_opts.count(opt) > 0; }
153  const std::string &val(char opt) const;
160  const char *val_c(char opt) const
161  { return have(opt) ? m_opts.at(opt).c_str() : ""; }
168  int val_i(char opt) const
169  { return have(opt) ? atoi(m_opts.at(opt).c_str()) : 0; }
175  char get_net_transport() const { return m_net_select; }
180  bool have_more() const { return m_end_optind < m_argc; }
185  int process_next() const { return m_end_optind; }
189  __PTPMGMT_DEPRECATED(int procces_next() const, return process_next())
191 };
192 
193 __PTPMGMT_NAMESPACE_END
194 #else /* __cplusplus */
195 #include "c/opt.h"
196 #endif /* __cplusplus */
197 
198 #endif /* __PTPMGMT_OPT_H */
Buffer for send, receive, build, and parse.
C interface to command line options parsing class.
Definition: buf.h:26
Hold and process options.
Definition: opt.h:47
int val_i(char opt) const
Definition: opt.h:168
bool insert(const Pmc_option &opt)
const char * val_c(char opt) const
Definition: opt.h:160
char get_net_transport() const
Definition: opt.h:175
void useDefOption()
const char * get_msg_c() const
Definition: opt.h:116
loop_val parse_options(int argc, char *const argv[])
const std::string & get_msg() const
Definition: opt.h:111
Options(bool useDef=true)
bool have(char opt) const
Definition: opt.h:146
loop_val
Definition: opt.h:80
@ OPT_DONE
Definition: opt.h:84
@ OPT_HELP
Definition: opt.h:83
@ OPT_MSG
Definition: opt.h:82
@ OPT_ERR
Definition: opt.h:81
const char * get_help()
int process_next() const
Definition: opt.h:185
const std::string & val(char opt) const
bool have_more() const
Definition: opt.h:180
Define name space.
Structre to add new option.
Definition: opt.h:29
std::string arg_help
Definition: opt.h:39
std::string help_msg
Definition: opt.h:38
std::string def_val
Definition: opt.h:40
char short_name
Definition: opt.h:34
bool have_arg
Definition: opt.h:36
std::string long_name
Definition: opt.h:35
bool long_only
Definition: opt.h:37