Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/atf/atf-c++/detail/application.hpp
39562 views
1
// Copyright (c) 2007 The NetBSD Foundation, Inc.
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions
6
// are met:
7
// 1. Redistributions of source code must retain the above copyright
8
// notice, this list of conditions and the following disclaimer.
9
// 2. Redistributions in binary form must reproduce the above copyright
10
// notice, this list of conditions and the following disclaimer in the
11
// documentation and/or other materials provided with the distribution.
12
//
13
// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
14
// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
18
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
20
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
22
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
24
// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26
#if !defined(ATF_CXX_DETAIL_APPLICATION_HPP)
27
#define ATF_CXX_DETAIL_APPLICATION_HPP
28
29
#include <ostream>
30
#include <set>
31
#include <stdexcept>
32
#include <string>
33
34
namespace atf {
35
namespace application {
36
37
// ------------------------------------------------------------------------
38
// The "usage_error" class.
39
// ------------------------------------------------------------------------
40
41
class usage_error : public std::runtime_error {
42
char m_text[4096];
43
44
public:
45
usage_error(const char*, ...) throw();
46
~usage_error(void) throw();
47
48
const char* what(void) const throw();
49
};
50
51
// ------------------------------------------------------------------------
52
// The "option" class.
53
// ------------------------------------------------------------------------
54
55
class option {
56
char m_character;
57
std::string m_argument;
58
std::string m_description;
59
60
friend class app;
61
62
public:
63
option(char, const std::string&, const std::string&);
64
65
bool operator<(const option&) const;
66
};
67
68
// ------------------------------------------------------------------------
69
// The "app" class.
70
// ------------------------------------------------------------------------
71
72
class app {
73
void process_options(void);
74
void usage(std::ostream&);
75
76
bool inited(void);
77
78
protected:
79
typedef std::set< option > options_set;
80
81
int m_argc;
82
char* const* m_argv;
83
84
const char* m_argv0;
85
const char* m_prog_name;
86
std::string m_description;
87
std::string m_manpage;
88
89
options_set options(void);
90
91
// To be redefined.
92
virtual std::string specific_args(void) const;
93
virtual options_set specific_options(void) const;
94
virtual void process_option(int, const char*);
95
virtual int main(void) = 0;
96
97
public:
98
app(const std::string&, const std::string&);
99
virtual ~app(void);
100
101
int run(int, char* const*);
102
};
103
104
} // namespace application
105
} // namespace atf
106
107
#endif // !defined(ATF_CXX_DETAIL_APPLICATION_HPP)
108
109