GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: tmp_project/OptionParser/src/OptionType.cpp Lines: 64 64 100.0 %
Date: 2024-12-09 15:30:52 Branches: 66 74 89.2 %

Line Branch Exec Source
1
/***************************************
2
	Auteur : Pierre Aubert
3
	Mail : pierre.aubert@lapp.in2p3.fr
4
	Licence : CeCILL-C
5
****************************************/
6
7
#include "OptionType.h"
8
9
///Say if the option type is a signed integer
10
/**	@param type : type to be checked
11
 * 	@return true if type is a signed integer, false otherwise
12
*/
13
5
bool isOptionSignedInteger(OptionType::OptionType type){
14

5
	return type >= OptionType::CHAR && type <= OptionType::LONG;
15
}
16
17
///Say if the option type is an unsigned integer
18
/**	@param type : type to be checked
19
 * 	@return true if type is an unsigned integer, false otherwise
20
*/
21
2
bool isOptionUnsignedInteger(OptionType::OptionType type){
22

2
	return type >= OptionType::UCHAR && type <= OptionType::ULONG;
23
}
24
25
///Say if the option type is an integer
26
/**	@param type : type to be checked
27
 * 	@return true if type is an integer, false otherwise
28
*/
29
4
bool isOptionInteger(OptionType::OptionType type){
30

4
	return isOptionSignedInteger(type) || isOptionUnsignedInteger(type);
31
}
32
33
///Say if the option type is a floating point
34
/**	@param type : type to be checked
35
 * 	@return true if type is a floating point, false otherwise
36
*/
37
4
bool isOptionFloatingPoint(OptionType::OptionType type){
38

4
	return type >= OptionType::FLOAT && type <= OptionType::DOUBLE;
39
}
40
41
///Say if the option is a filename, a drectory, both or a string
42
/**	@param type : type to be checked
43
 * 	@return true if type is a filename, a drectory, both or a string, false otherwise
44
*/
45
36
bool isOptionStringFileDir(OptionType::OptionType type){
46


36
	return type == OptionType::STRING || type == OptionType::FILE_OR_DIR || type == OptionType::FILENAME ||  type == OptionType::DIRECTORY;
47
}
48
49
///Say if two types are compatible
50
/**	@param typeFromParam : type from parameters user
51
 * 	@param typeFromType : type automatically determined with default value type
52
 * 	@return true if the two types are compatible, false otherwise
53
*/
54
54
bool isOptionTypeCompatible(OptionType::OptionType typeFromParam, OptionType::OptionType typeFromType){
55
54
	if(typeFromParam == typeFromType){return true;}
56
	//If we are waiting for a boolean, but we do not get one, => fail
57
17
	if(typeFromParam == OptionType::BOOL){return false;}
58

17
	if(isOptionStringFileDir(typeFromParam) && isOptionStringFileDir(typeFromType)){return true;}
59
60

2
	if(isOptionInteger(typeFromParam) && isOptionFloatingPoint(typeFromType)){return false;}
61
62
1
	return true;
63
}
64
65
///Convert the OptionType into string
66
/**	@param type : OptionType to be converted
67
 * 	@return string
68
*/
69
91
std::string convertOptionTypeToString(OptionType::OptionType type){
70




91
	switch(type){
71
1
		case OptionType::NONE:
72
1
			return "NONE";
73
30
		case OptionType::STRING:
74
30
			return "STRING";
75
17
		case OptionType::FILENAME:
76
17
			return "FILENAME";
77
5
		case OptionType::DIRECTORY:
78
5
			return "DIRECTORY";
79
1
		case OptionType::FILE_OR_DIR:
80
1
			return "FILE_OR_DIR";
81
1
		case OptionType::BOOL:
82
1
			return "BOOL";
83
1
		case OptionType::CHAR:
84
1
			return "CHAR";
85
1
		case OptionType::SHORT:
86
1
			return "SHORT";
87
26
		case OptionType::INT:
88
26
			return "INT";
89
1
		case OptionType::LONG:
90
1
			return "LONG";
91
1
		case OptionType::UCHAR:
92
1
			return "UCHAR";
93
1
		case OptionType::USHORT:
94
1
			return "USHORT";
95
1
		case OptionType::UINT:
96
1
			return "UINT";
97
1
		case OptionType::ULONG:
98
1
			return "ULONG";
99
1
		case OptionType::FLOAT:
100
1
			return "FLOAT";
101
1
		case OptionType::DOUBLE:
102
1
			return "DOUBLE";
103
1
		default:
104
1
			return "";
105
	}
106
}
107
108
template<>
109
91
OptionType::OptionType getOptionTypeFromType<std::string>(){return OptionType::STRING;}
110
template<>
111
1
OptionType::OptionType getOptionTypeFromType<bool>(){return OptionType::BOOL;}
112
template<>
113
1
OptionType::OptionType getOptionTypeFromType<char>(){return OptionType::CHAR;}
114
template<>
115
1
OptionType::OptionType getOptionTypeFromType<short>(){return OptionType::SHORT;}
116
template<>
117
3
OptionType::OptionType getOptionTypeFromType<int>(){return OptionType::INT;}
118
template<>
119
1
OptionType::OptionType getOptionTypeFromType<long>(){return OptionType::LONG;}
120
template<>
121
1
OptionType::OptionType getOptionTypeFromType<unsigned char>(){return OptionType::UCHAR;}
122
template<>
123
1
OptionType::OptionType getOptionTypeFromType<unsigned short>(){return OptionType::USHORT;}
124
template<>
125
1
OptionType::OptionType getOptionTypeFromType<unsigned int>(){return OptionType::UINT;}
126
template<>
127
13
OptionType::OptionType getOptionTypeFromType<unsigned long>(){return OptionType::ULONG;}
128
template<>
129
1
OptionType::OptionType getOptionTypeFromType<float>(){return OptionType::FLOAT;}
130
template<>
131
1
OptionType::OptionType getOptionTypeFromType<double>(){return OptionType::DOUBLE;}
132
133
134
135
136