-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetparameter.h
82 lines (66 loc) · 2.38 KB
/
getparameter.h
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
81
82
#ifndef GETPARAMETER_H
#define GETPARAMETER_H
#include <QString>
#include <QFile>
#include <iostream>
#include <typeinfo> // operator typeid
#include "csvParser/csv.h"
namespace getparameter {
// Open file and read parameter
int readInt (QString parameterName, QString fileName, int defaultVal = -1);
unsigned int readUInt (QString parameterName, QString fileName, unsigned int defaultVal = 0);
double readDouble (QString parameterName, QString fileName, double defaultVal = -1.0);
QString readQString (QString parameterName, QString fileName, QString defaultVal = "NA");
// Get parameter from an already opened file
int getInt (QString parameterName, QFile &file, int defaultVal = -1);
unsigned int getUInt (QString parameterName, QFile &file, unsigned int defaultVal = 0);
double getDouble (QString parameterName, QFile &file, double defaultVal = -1.0);
QString getQString (QString parameterName, QFile &file, QString defaultVal = "NA");
// Possible delimiters between parameter name and value (comma, semi-colon, tab, one or more spaces)
static QString delimiters = "[,;\\t\\s+]";
// Little helper functions
template <typename T1, typename T2>
bool isEqual(T1 val1, T2 val2, unsigned precision = 6)
{
if (val1 == val2) {
return true; // shortcut
}
// comparing QStrings to avoid floating point problems
QString val1String = QString::number(val1, 'g', (int)precision);
QString val2String = QString::number(val2, 'g', (int)precision);
if (val1String == val2String) {
return true;
}
return false;
}
template <typename T>
bool greaterThen(T i, T j)
{
return (i > j);
}
template <typename T> unsigned indexOfLowestValue(std::vector<T> vector)
{
auto tmp = vector;
std::sort(tmp.begin(), tmp.end());
for (unsigned i = 0; i < vector.size(); i++){
if (vector[i] <= tmp[0]){
return i;
}
}
std::cerr << "Function indexOfLowestValue failed!";
return 0;
}
template <typename T> unsigned indexOfHighestValue(std::vector<T> vector)
{
auto tmp = vector;
std::sort(tmp.begin(), tmp.end(), greaterThen<T>);
for (unsigned i = 0; i < vector.size(); i++){
if (vector[i] >= tmp[0]){
return i;
}
}
std::cerr << "Function indexOfLowestValue failed!";
return 0;
}
}
#endif // GETPARAMETER_H