Eclipse SUMO - Simulation of Urban MObility
StringUtils.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2001-2022 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
21// Some static methods for string processing
22/****************************************************************************/
23#pragma once
24#include <config.h>
25#include <string>
26#include <chrono>
27#include <sstream>
28#include <iomanip>
29#include <xercesc/util/XMLString.hpp>
32
33
34// ===========================================================================
35// class definitions
36// ===========================================================================
42public:
44 static std::string prune(const std::string& str);
45
47 static std::string pruneZeros(const std::string& str, int max);
48
50 static std::string to_lower_case(const std::string& str);
51
53 static std::string latin1_to_utf8(std::string str);
54
56 static std::string convertUmlaute(std::string str);
57
60 static std::string replace(std::string str, const std::string& what, const std::string& by);
61
64 static std::string substituteEnvironment(const std::string& str, const std::chrono::time_point<std::chrono::system_clock>* const timeRef = nullptr);
65
67 static bool startsWith(const std::string& str, const std::string prefix);
68
70 static bool endsWith(const std::string& str, const std::string suffix);
71
73 static std::string padFront(const std::string& str, int length, char padding);
74
84 static std::string escapeXML(const std::string& orig, const bool maskDoubleHyphen = false);
85
87 static std::string emptyString;
88
89 // the following methods stem from http://bogomip.net/blog/cpp-url-encoding-and-decoding/
90
91 static std::string urlEncode(const std::string& url, const std::string encodeWhich = "");
92 static std::string urlDecode(const std::string& encoded);
93
94 static std::string charToHex(unsigned char c);
95 static unsigned char hexToChar(const std::string& str);
96
101 static int toInt(const std::string& sData);
102
105 static int toIntSecure(const std::string& sData, int def);
106
111 static long long int toLong(const std::string& sData);
112
117 static int hexToInt(const std::string& sData);
118
123 static double toDouble(const std::string& sData);
124
127 static double toDoubleSecure(const std::string& sData, const double def);
128
135 static bool toBool(const std::string& sData);
136
140 static inline std::string transcode(const XMLCh* const data) {
141 return transcode(data, (int)XERCES_CPP_NAMESPACE::XMLString::stringLen(data));
142 }
143
147 static std::string transcode(const XMLCh* const data, int length);
148
150 static std::string transcodeFromLocal(const std::string& localString);
151
153 static std::string transcodeToLocal(const std::string& utf8String);
154
156 static std::string trim_left(const std::string s, const std::string& t = " \t\n");
157
159 static std::string trim_right(const std::string s, const std::string& t = " \t\n");
160
162 static std::string trim(const std::string s, const std::string& t = " \t\n");
163
165 static void resetTranscoder();
166
168 // variadic function
169 template<typename T, typename... Targs>
170 static const std::string format(const std::string& format, T value, Targs... Fargs) {
171 std::ostringstream os;
172 os << std::fixed << std::setprecision(gPrecision);
173 _format(format.c_str(), os, value, Fargs...);
174 return os.str();
175 }
176
177private:
178 static void _format(const char* format, std::ostringstream& os) {
179 os << format;
180 }
181
183 // variadic function
184 template<typename T, typename... Targs>
185 static void _format(const char* format, std::ostringstream& os, T value, Targs... Fargs) {
186 for (; *format != '\0'; format++) {
187 if (*format == '%') {
188 os << value;
189 _format(format + 1, os, Fargs...); // recursive call
190 return;
191 }
192 os << *format;
193 }
194 }
195
196private:
197 static XERCES_CPP_NAMESPACE::XMLLCPTranscoder* myLCPTranscoder;
198};
int gPrecision
the precision for floating point outputs
Definition: StdDefs.cpp:25
Some static methods for string processing.
Definition: StringUtils.h:41
static std::string pruneZeros(const std::string &str, int max)
Removes trailing zeros (at most 'max')
Definition: StringUtils.cpp:66
static std::string urlEncode(const std::string &url, const std::string encodeWhich="")
static std::string charToHex(unsigned char c)
static std::string urlDecode(const std::string &encoded)
static long long int toLong(const std::string &sData)
converts a string into the long value described by it by calling the char-type converter,...
static double toDoubleSecure(const std::string &sData, const double def)
converts a string into the integer value described by it
static std::string trim(const std::string s, const std::string &t=" \t\n")
remove leading and trailing whitespace
static std::string to_lower_case(const std::string &str)
Transfers the content to lower case.
Definition: StringUtils.cpp:76
static void _format(const char *format, std::ostringstream &os, T value, Targs... Fargs)
adds a new formatted message
Definition: StringUtils.h:185
static void resetTranscoder()
must be called when shutting down the xml subsystem
static XERCES_CPP_NAMESPACE::XMLLCPTranscoder * myLCPTranscoder
Definition: StringUtils.h:197
static std::string trim_right(const std::string s, const std::string &t=" \t\n")
remove trailing whitespace from string
static void _format(const char *format, std::ostringstream &os)
Definition: StringUtils.h:178
static std::string trim_left(const std::string s, const std::string &t=" \t\n")
remove leading whitespace from string
static std::string replace(std::string str, const std::string &what, const std::string &by)
static int hexToInt(const std::string &sData)
converts a string with a hex value into the integer value described by it by calling the char-type co...
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static std::string escapeXML(const std::string &orig, const bool maskDoubleHyphen=false)
Replaces the standard escapes by their XML entities.
static std::string latin1_to_utf8(std::string str)
Transfers from Latin 1 (ISO-8859-1) to UTF-8.
Definition: StringUtils.cpp:86
static std::string prune(const std::string &str)
Removes trailing and leading whitechars.
Definition: StringUtils.cpp:55
static std::string padFront(const std::string &str, int length, char padding)
static std::string convertUmlaute(std::string str)
Converts german "Umlaute" to their latin-version.
static unsigned char hexToChar(const std::string &str)
static const std::string format(const std::string &format, T value, Targs... Fargs)
adds a new formatted message
Definition: StringUtils.h:170
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
static std::string emptyString
An empty string.
Definition: StringUtils.h:87
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
static std::string substituteEnvironment(const std::string &str, const std::chrono::time_point< std::chrono::system_clock > *const timeRef=nullptr)
static std::string transcode(const XMLCh *const data)
converts a 0-terminated XMLCh* array (usually UTF-16, stemming from Xerces) into std::string in UTF-8
Definition: StringUtils.h:140
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
static int toIntSecure(const std::string &sData, int def)
converts a string into the integer value described by it
static std::string transcodeFromLocal(const std::string &localString)
convert a string from the local codepage to UTF-8
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter,...
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter