Directory: | ./ |
---|---|
File: | src/OptionParser_impl.h |
Date: | 2024-07-27 10:53:27 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 8 | 8 | 100.0% |
Branches: | 6 | 6 | 100.0% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /*************************************** | ||
2 | Auteur : Pierre Aubert | ||
3 | Mail : pierre.aubert@lapp.in2p3.fr | ||
4 | Licence : CeCILL-C | ||
5 | ****************************************/ | ||
6 | |||
7 | #ifndef __POPTIONPARSER_IMPL_H__ | ||
8 | #define __POPTIONPARSER_IMPL_H__ | ||
9 | |||
10 | #include <sstream> | ||
11 | #include "OptionParser.h" | ||
12 | |||
13 | ///Add an option in the OptionParser | ||
14 | /** @param longOption : long option (start with --) as --version | ||
15 | * @param shortOption : short option (start with -) as -v | ||
16 | * @param defaultValue : default value of the option | ||
17 | * @param docString : documentation string of the option | ||
18 | * The type of the option will be automatically determined with the type of the default value | ||
19 | */ | ||
20 | template<typename T> | ||
21 | 44 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const T defaultValue, const std::string & docString){ | |
22 |
1/1✓ Branch 1 taken 44 times.
|
44 | OptionType::OptionType optionType = getOptionTypeFromType<T>(); |
23 |
1/1✓ Branch 1 taken 44 times.
|
44 | OptionValue value; |
24 |
1/1✓ Branch 1 taken 44 times.
|
44 | value.setType(optionType); |
25 |
1/1✓ Branch 1 taken 44 times.
|
44 | value.setDefaultValue(defaultValue); |
26 |
1/1✓ Branch 1 taken 44 times.
|
44 | Option option(longOption, shortOption, value, false, docString); |
27 |
1/1✓ Branch 2 taken 44 times.
|
44 | p_vecMode.back().addOption(option); |
28 | 44 | } | |
29 | |||
30 | ///Add an option in the OptionParser | ||
31 | /** @param longOption : long option (start with --) as --version | ||
32 | * @param shortOption : short option (start with -) as -v | ||
33 | * @param defaultValue : default value of the option | ||
34 | * @param optionType : type of the data of the option (int, float, double, string, etc) | ||
35 | * @param docString : documentation string of the option | ||
36 | * The function will check if the given optionType is relevant with the type of the default value | ||
37 | */ | ||
38 | template<typename T> | ||
39 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const T defaultValue, | ||
40 | OptionType::OptionType optionType, const std::string & docString) | ||
41 | { | ||
42 | checkOptionType<T>(optionType); | ||
43 | OptionValue value; | ||
44 | value.setType(optionType); | ||
45 | value.setDefaultValue(defaultValue); | ||
46 | Option option(longOption, shortOption, value, false, docString); | ||
47 | p_vecMode.back().addOption(option); | ||
48 | } | ||
49 | |||
50 | ///Add an option in the OptionParser | ||
51 | /** @param longOption : long option (start with --) as --version | ||
52 | * @param shortOption : short option (start with -) as -v | ||
53 | * @param defaultValue : default value of the option | ||
54 | * @param docString : documentation string of the option | ||
55 | * The type of the option will be automatically determined with the type of the default value | ||
56 | */ | ||
57 | template<typename T> | ||
58 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const std::vector<T> & defaultValue, const std::string & docString){ | ||
59 | OptionType::OptionType optionType = getOptionTypeFromType<T>(); | ||
60 | OptionValue valueVec; | ||
61 | valueVec.setType(optionType); | ||
62 | valueVec.setDefaultValue(defaultValue); | ||
63 | Option option(longOption, shortOption, valueVec, false, docString); | ||
64 | p_vecMode.back().addOption(option); | ||
65 | } | ||
66 | |||
67 | ///Add an option in the OptionParser | ||
68 | /** @param longOption : long option (start with --) as --version | ||
69 | * @param shortOption : short option (start with -) as -v | ||
70 | * @param defaultValue : default value of the option | ||
71 | * @param docString : documentation string of the option | ||
72 | * The type of the option will be automatically determined with the type of the default value | ||
73 | */ | ||
74 | template<typename T> | ||
75 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const std::list<T> & defaultValue, const std::string & docString){ | ||
76 | OptionType::OptionType optionType = getOptionTypeFromType<T>(); | ||
77 | OptionValue valueList; | ||
78 | valueList.setType(optionType); | ||
79 | valueList.setDefaultValue(defaultValue); | ||
80 | Option option(longOption, shortOption, valueList, false, docString); | ||
81 | p_vecMode.back().addOption(option); | ||
82 | } | ||
83 | |||
84 | ///Add an option in the OptionParser | ||
85 | /** @param longOption : long option (start with --) as --version | ||
86 | * @param shortOption : short option (start with -) as -v | ||
87 | * @param defaultValue : default value of the option | ||
88 | * @param optionType : type of the data of the option (int, float, double, string, etc) | ||
89 | * @param docString : documentation string of the option | ||
90 | * The function will check if the given optionType is relevant with the type of the default value | ||
91 | */ | ||
92 | template<typename T> | ||
93 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const std::vector<T> & defaultValue, | ||
94 | OptionType::OptionType optionType, const std::string & docString) | ||
95 | { | ||
96 | checkOptionType<T>(optionType); | ||
97 | OptionValue valueVec; | ||
98 | valueVec.setDefaultValue(defaultValue); | ||
99 | valueVec.setType(optionType); | ||
100 | Option option(longOption, shortOption, valueVec, false, docString); | ||
101 | p_vecMode.back().addOption(option); | ||
102 | } | ||
103 | |||
104 | ///Add an option in the OptionParser | ||
105 | /** @param longOption : long option (start with --) as --version | ||
106 | * @param shortOption : short option (start with -) as -v | ||
107 | * @param defaultValue : default value of the option | ||
108 | * @param optionType : type of the data of the option (int, float, double, string, etc) | ||
109 | * @param docString : documentation string of the option | ||
110 | * The function will check if the given optionType is relevant with the type of the default value | ||
111 | */ | ||
112 | template<typename T> | ||
113 | void OptionParser::addOption(const std::string & longOption, const std::string & shortOption, const std::list<T> & defaultValue, | ||
114 | OptionType::OptionType optionType, const std::string & docString) | ||
115 | { | ||
116 | checkOptionType<T>(optionType); | ||
117 | OptionValue valueList; | ||
118 | valueList.setDefaultValue(defaultValue); | ||
119 | valueList.setType(optionType); | ||
120 | Option option(longOption, shortOption, valueList, false, docString); | ||
121 | p_vecMode.back().addOption(option); | ||
122 | } | ||
123 | |||
124 | ///Check the given option type | ||
125 | /** @param optionType : type of the option to be checked | ||
126 | * Throw an exception if there is a problem | ||
127 | */ | ||
128 | template<typename T> | ||
129 | void OptionParser::checkOptionType(OptionType::OptionType optionType){ | ||
130 | OptionType::OptionType optionTypeFromDefault = getOptionTypeFromType<T>(); | ||
131 | if(!isOptionTypeCompatible(optionType, optionTypeFromDefault)){ | ||
132 | std::stringstream strError; | ||
133 | strError << "OptionParser::checkOptionType : Incompatible types from parameters (" << convertOptionTypeToString(optionType) << ") ad for default type ("<<convertOptionTypeToString(optionTypeFromDefault)<<")"; | ||
134 | throw std::runtime_error(strError.str()); | ||
135 | } | ||
136 | } | ||
137 | |||
138 | #endif | ||
139 | |||
140 |