ITAStringUtils.h 10.8 KB
Newer Older
Jonas Stienen's avatar
Jonas Stienen committed
1
/*
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 * ----------------------------------------------------------------
 *
 *		ITA core libs
 *		(c) Copyright Institute of Technical Acoustics (ITA)
 *		RWTH Aachen University, Germany, 2015-2017
 *
 * ----------------------------------------------------------------
 *				    ____  __________  _______
 *				   //  / //__   ___/ //  _   |
 *				  //  /    //  /    //  /_|  |
 *				 //  /    //  /    //  ___   |
 *				//__/    //__/    //__/   |__|
 *
 * ----------------------------------------------------------------
 *
 */
Jonas Stienen's avatar
Jonas Stienen committed
18
19
20
21
22
23
24
25
26
27

#ifndef INCLUDE_WATCHER_ITA_STRING_UTILS
#define INCLUDE_WATCHER_ITA_STRING_UTILS

#include <ITABaseDefinitions.h>
#include <ITATypes.h>
#include <ITAException.h>

#include <string>
#include <vector>
Fabian Schlieper's avatar
Fabian Schlieper committed
28
#include <sstream>
Jonas Stienen's avatar
Jonas Stienen committed
29
30
31
32
33

// Konvertierungsklasse
class ITA_BASE_API ITAConversion
{
public:
34
35
	static const int STRICT_MODE = ( 1 << 0 );		// Konvertierungen mittels Regex prfen (sauber!)
	static const int THROW_EXCEPTIONS = ( 1 << 1 );	// ITAExceptios werfen wenn eine Konvertierung fehlschlgt
Jonas Stienen's avatar
Jonas Stienen committed
36
37
38

	static const int DEFAULT_OPTIONS = STRICT_MODE | THROW_EXCEPTIONS;

39
40
	inline ITAConversion() : m_iOpts( DEFAULT_OPTIONS ) {};
	inline ITAConversion( int iOpts ) : m_iOpts( iOpts ) {};
Jonas Stienen's avatar
Jonas Stienen committed
41

42
43
44
45
46
47
48
	bool StringToBool( const std::string& s, bool& b );
	bool StringToInt( const std::string& s, int& i );
	bool StringToUInt( const std::string& s, unsigned int& i );
	bool StringToInt64( const std::string& s, int64_t& i );
	bool StringToUInt64( const std::string& s, uint64_t& i );
	bool StringToFloat( const std::string& s, float& f );
	bool StringToDouble( const std::string& s, double& d );
Jonas Stienen's avatar
Jonas Stienen committed
49

50
51
52
53
54
	bool StringToIntVec( const std::string& s, std::vector<int>& v, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
	bool StringToUIntVec( const std::string& s, std::vector<unsigned int>& v, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
	bool StringToFloatVec( const std::string& s, std::vector<float>& v, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
	bool StringToDoubleVec( const std::string& s, std::vector<double>& v, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
	bool StringToStringVec( const std::string& s, std::vector< std::string >& v, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
55
56
57
58
59
60
61

private:
	int m_iOpts;
};


//! Eine Zeichenkette in Kleinbuchstaben konvertieren
62
ITA_BASE_API std::string toLowercase( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
63
64

//! Eine Zeichenkette in Grossbuchstaben konvertieren
65
ITA_BASE_API std::string toUppercase( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
66
67

//! bool nach std::string konvertieren
68
ITA_BASE_API std::string BoolToString( bool bValue );
Jonas Stienen's avatar
Jonas Stienen committed
69
70

//! int nach std::string konvertieren
71
ITA_BASE_API std::string IntToString( int iValue );
Jonas Stienen's avatar
Jonas Stienen committed
72
73

//! unsigned int nach std::string konvertieren
74
ITA_BASE_API std::string UIntToString( unsigned int uiValue );
Jonas Stienen's avatar
Jonas Stienen committed
75
76

//! long nach std::string konvertieren
77
ITA_BASE_API std::string LongToString( unsigned int lValue );
Jonas Stienen's avatar
Jonas Stienen committed
78
79

//! 64-Bit Integer mit Vorzeichen nach std::string konvertieren
80
ITA_BASE_API std::string Int64ToString( int64_t i64Value );
Jonas Stienen's avatar
Jonas Stienen committed
81
82

//! Vorzeichenlosen 64-Bit Integer nach std::string konvertieren
83
ITA_BASE_API std::string UInt64ToString( uint64_t ui64Value );
Jonas Stienen's avatar
Jonas Stienen committed
84
85

//! float nach std::string konvertieren
86
ITA_BASE_API std::string FloatToString( float fValue, int iPrecision = -1 );
Jonas Stienen's avatar
Jonas Stienen committed
87
88

//! double nach std::string konvertieren
89
ITA_BASE_API std::string DoubleToString( double dValue, int iPrecision = -1 );
Jonas Stienen's avatar
Jonas Stienen committed
90
91

//! Bitmaske nach std::string konvertieren
92
ITA_BASE_API std::string BitmaskToString( int iMask, int iNumBits = 32 );
Jonas Stienen's avatar
Jonas Stienen committed
93
94

//! Dezibelangabe (double) nach std::string konvertieren
95
ITA_BASE_API std::string DecibelToString( double dDecibelValue, std::string sMinusInfinity = "-inf", std::string sUnit = "dB" );
Jonas Stienen's avatar
Jonas Stienen committed
96
97
98

//! std::vector<Enum_Type> nach std::string konvertieren
template <typename TEnum>
99
inline std::string EnumVecToString( std::vector<TEnum> veValues, std::string sSeparator = ", " )
Jonas Stienen's avatar
Jonas Stienen committed
100
{
101
102
103
104
105
106
107
108
	std::stringstream s;
	if( !veValues.empty() )
	{
		s << static_cast< int >( veValues.front() );
		for( unsigned int i = 1; i < veValues.size(); i++ )
			s << sSeparator << static_cast< int >( veValues[ i ] );
	}
	return s.str();
Jonas Stienen's avatar
Jonas Stienen committed
109
110
111
};

//! std::vector<int> nach std::string konvertieren
112
ITA_BASE_API std::string IntVecToString( std::vector<int> viValues, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
113
114

//! std::vector<unsigned int> nach std::string konvertieren
115
ITA_BASE_API std::string UIntVecToString( std::vector<unsigned int> vuiValues, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
116
117

//! std::vector<float> nach std::string konvertieren
118
ITA_BASE_API std::string FloatVecToString( std::vector<float> vfValues, int iPrecision = -1, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
119
120

//! std::vector<double> nach std::string konvertieren
121
ITA_BASE_API std::string DoubleVecToString( std::vector<double> vdValues, int iPrecision = -1, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
122
123

//! std::vector<std::string> nach std::string konvertieren
124
ITA_BASE_API std::string StringVecToString( std::vector<std::string> vsValues, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
125
126

//! int-Array nach std::string konvertieren
127
ITA_BASE_API std::string IntArrayToString( const int* piValues, size_t count, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
128
129

//! unsigned int-Array nach std::string konvertieren
130
ITA_BASE_API std::string UIntArrayToString( const unsigned int* puiValues, size_t count, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
131
132

//! float-Array nach std::string konvertieren
133
ITA_BASE_API std::string FloatArrayToString( const float* pfValues, size_t count, int iPrecision = -1, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
134
135

//! Komplexwertiges float-Array nach std::string konvertieren
136
ITA_BASE_API std::string ComplexFloatArrayToString( const float* pfValues, size_t count, int iPrecision = -1, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
137
138

//! double-Array nach std::string konvertieren
139
ITA_BASE_API std::string DoubleArrayToString( const double* pdValues, size_t count, int iPrecision = -1, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
140
141

//! String-Array nach std::string konvertieren
142
ITA_BASE_API std::string StringArrayToString( const char** ppcValues, size_t count, std::string sSeparator = ", " );
Jonas Stienen's avatar
Jonas Stienen committed
143
144
145
146
147
148
149
150

/* +-------------------------------------------------------------+
   |                                                             |
   |   Konvertierungsfunktionen der Form:  String -> Objekt(e)   |
   |                                                             |
   +-------------------------------------------------------------+ */

//! std::string nach bool parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
151
ITA_BASE_API bool StringToBool( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
152
153

//! std::string nach int parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
154
ITA_BASE_API int StringToInt( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
155
156

//! std::string nach unsigned int parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
157
ITA_BASE_API unsigned int StringToUInt( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
158
159
160
161
162
163
164
165

//! std::string nach int64_t parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
//ITA_BASE_API int64_t StringToInt64(const std::string& s);

//! std::string nach uint64_t parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
//uint64_t StringToUInt64(const std::string& s);

//! std::string nach float parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
166
ITA_BASE_API float StringToFloat( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
167
168

//! std::string nach double parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
169
ITA_BASE_API double StringToDouble( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
170
171
172
173

//! Alle folgenden Operationen arbeiten Case-Sensitive?

//! std::string nach int-Liste parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
174
ITA_BASE_API std::vector<int> StringToIntVec( const std::string& s, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
175
176

//! std::string nach unsigned int-Liste parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
177
ITA_BASE_API std::vector<unsigned int> StringToUIntVec( const std::string& s, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
178
179

//! std::string nach float-Liste parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
180
ITA_BASE_API std::vector<float> StringToFloatVec( const std::string& s, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
181
182

//! std::string nach double-Liste parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
183
ITA_BASE_API std::vector<double> StringToDoubleVec( const std::string& s, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
184
185

//! std::string nach String-Liste parsen (Parse-Fehler werden in ITAExceptions umgesetzt)
186
ITA_BASE_API std::vector< std::string > StringToStringVec( const std::string& s, std::string sSeparatorRegex = "\\s*,\\s*", bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
187
188
189
190
191
192
193
194

/* +-------------------------------------+
   |                                     |
   |   Weitere Zeichenkettenfunktionen   |
   |                                     |
   +-------------------------------------+ */

//! Einen String n-Mal aneinander hngen
195
ITA_BASE_API std::string nTimes( std::string s, unsigned int n );
Jonas Stienen's avatar
Jonas Stienen committed
196
197

//! Zeichenkette in Teile zerlegen die durch das angebenene Zeichen getrennt sind
198
ITA_BASE_API std::vector< std::string > splitString( const std::string& s, char cSeparator );
Jonas Stienen's avatar
Jonas Stienen committed
199
200

//! Zeichenkette in Teile zerlegen die durch die angebenene Zeichenkette getrennt sind
201
ITA_BASE_API std::vector< std::string > splitString( const std::string& s, const std::string& sSeparator );
Jonas Stienen's avatar
Jonas Stienen committed
202
203

//! Zeichenkette in Teile zerlegen die durch das angebenene Zeichen getrennt sind
204
ITA_BASE_API void regexSplitString( const std::string& src, std::vector< std::string >& dest, const std::string& regex, bool bMatchCase = true );
Jonas Stienen's avatar
Jonas Stienen committed
205
206
207


//! Entfernt alle Leerzeichen am Anfang und Ende einer Zeichenkette
208
ITA_BASE_API std::string stripSpaces( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
209
210

//! Verhltnis als dB-Angabe (Leistungs-/Energiepegel, 10*log10(...)) formattieren
211
ITA_BASE_API std::string ratio_to_db10_str( double r, std::string sSuffix = "" );
Jonas Stienen's avatar
Jonas Stienen committed
212
213

//! Verhltnis als dB-Angabe (Schalldruckpegel, 20*log10(...)) formattieren
214
ITA_BASE_API std::string ratio_to_db20_str( double r, std::string sSuffix = "" );
Jonas Stienen's avatar
Jonas Stienen committed
215
216
217
218
219
220
221
222
223
224

//! Einen Verstrkungsfaktor (reiner Faktor oder Dezibel) aus Zeichenkette lesen
/**
 * Liet einen Verstrkungsfaktor aus der angegebenen Zeichenkette und
 * interpretiert ihn als reinen Faktor bzw. als Angabe in Dezibel,
 * sofern er mit dem Suffix dB endet. Der Faktor Null entspricht
 * der Zeichenkette "-inf db". Zurckgegeben wird der Wert als reiner Faktor.
 *
 * Im Fehlerfall wird eine ITAException ausgelst.
 */
225
226
ITA_BASE_API double str_to_amp_ratio_db10( const std::string& s );
ITA_BASE_API double str_to_amp_ratio_db20( const std::string& s );
Jonas Stienen's avatar
Jonas Stienen committed
227
228
229

//! Zeit [s] in eine Zeichenkette konvertieren
// (Alias fr altes convertTimeToHumanReadableString in HPT)
230
ITA_BASE_API std::string timeToString( const double dSeconds );
Jonas Stienen's avatar
Jonas Stienen committed
231
232

//! Substituiert das erste Makro der Form $(MAKRONAME) mit dem Makro-Wert und liefert das Ergebnis zurck
233
ITA_BASE_API std::string SubstituteMacro( const std::string& sInput, const std::string& sMacroName, const std::string& sMacroValue );
Jonas Stienen's avatar
Jonas Stienen committed
234
235

#endif // INCLUDE_WATCHER_ITA_STRING_UTILS