-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCmdOptions.hpp
More file actions
80 lines (67 loc) · 2.25 KB
/
CmdOptions.hpp
File metadata and controls
80 lines (67 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//============================================================================
// Name : TvGuideFetch
// Author : John Saunders
// Copyright : Copyright (c) 2009 John Saunders
// Description : Fetch Australian XMLTV guide data from oztivo
//============================================================================
#ifndef CMDOPTIONS_HPP
#define CMDOPTIONS_HPP
#include <ostream>
class CmdParser
{
public:
static CmdParser &instance();
bool parse(int argc, char** argv);
const char* getProgramName();
const char* getParameter(int index);
void writeCmdHelp(std::ostream &out);
// A switch option simply sets a flag when the option is specified.
typedef unsigned char flag;
void addSwitchOption(char shortOpt, const char* longOpt,
const char* description, flag* flagPtr);
flag getSwitchValue(const std::string& longOpt);
// An argument option stores the specified switch argument.
typedef const char* arg;
void addArgumentOption(char shortOpt, const char* longOpt,
const char* description, arg* argPtr);
arg getArgumentValue(const std::string& longOpt);
// A method option calls a function when the option is specified.
typedef void (method)(CmdParser &parser);
void addMethodOption(char shortOpt, const char* longOpt,
const char* description, method* methodPtr);
private:
// Singleton pattern _must_ make these methods private.
CmdParser();
~CmdParser();
CmdParser(const CmdParser &);
CmdParser &operator=(const CmdParser &);
class Option
{
public:
Option();
Option* m_next;
char m_shortOption;
const char* m_longOption;
const char* m_description;
int m_flag;
flag* m_flagPtr;
arg* m_argPtr;
method* m_methodPtr;
};
void addOption(Option* opt);
const char* getShortOptions();
struct option* getLongOptions();
void processShortOptions(int arg);
void processLongOptions(int arg);
// Parsed command line words.
int m_argc;
char** m_argv;
// List of options.
Option* m_head;
Option* m_tail;
// Data structures built for getopt_long.
int m_numOptions;
char* m_shortOptions;
struct option* m_longOptions;
};
#endif