Project
Loading...
Searching...
No Matches
StringUtils.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#ifndef ALICEO2_STRINGUTILS_H
18#define ALICEO2_STRINGUTILS_H
19
20#include <sstream>
21#include <vector>
22#include <algorithm>
23#include <fmt/format.h>
24#include <Rtypes.h>
25
26namespace o2
27{
28namespace utils
29{
30
31struct Str {
32
33 // Code for trimming coming from https://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
34
39 static inline void ltrim(std::string& s)
40 {
41 s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { return !std::isspace(ch); }));
42 }
43
44 static inline void ltrim(std::string& s, const std::string& start)
45 {
46 if (beginsWith(s, start)) {
47 s.erase(0, start.size());
48 }
49 }
50
55 static inline void rtrim(std::string& s)
56 {
57 s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) { return !std::isspace(ch); }).base(), s.end());
58 }
59
60 static inline void rtrim(std::string& s, const std::string& ending)
61 {
62 if (endsWith(s, ending)) {
63 s.erase(s.size() - ending.size(), ending.size());
64 }
65 }
66
71 static inline void trim(std::string& s)
72 {
73 ltrim(s);
74 rtrim(s);
75 }
76
82 static inline std::string ltrim_copy(const std::string& s)
83 {
84 std::string ss = s;
85 ltrim(ss);
86 return ss;
87 }
88
89 static inline std::string ltrim_copy(const std::string& s, const std::string& start)
90 {
91 std::string ss = s;
92 ltrim(ss, start);
93 return ss;
94 }
95
101 static inline std::string rtrim_copy(const std::string& s)
102 {
103 std::string ss = s;
104 rtrim(ss);
105 return ss;
106 }
107
108 static inline std::string rtrim_copy(const std::string& s, const std::string& ending)
109 {
110 std::string ss = s;
111 rtrim(ss, ending);
112 return ss;
113 }
114
120 static inline std::string trim_copy(const std::string& s)
121 {
122 std::string ss = s;
123 rtrim(ss);
124 return ss;
125 }
126
127 static inline bool endsWith(const std::string& s, const std::string& ending)
128 {
129 return (ending.size() > s.size()) ? false : std::equal(ending.rbegin(), ending.rend(), s.rbegin());
130 }
131
132 static inline bool beginsWith(const std::string& s, const std::string& start)
133 {
134 return (start.size() > s.size()) ? false : std::equal(start.begin(), start.end(), s.begin());
135 }
136
137 // return vector of tokens from the string with provided delimiter. If requested, trim the spaces from tokens
138 static std::vector<std::string> tokenize(const std::string& src, char delim, bool trimToken = true, bool skipEmpty = true);
139
140 // concatenate arbitrary number of strings
141 template <typename... Ts>
142 static std::string concat_string(Ts const&... ts)
143 {
144 std::stringstream s;
145 (s << ... << ts);
146 return s.str();
147 }
148
149 // generate random string of given length, suitable for file names
150 static std::string getRandomString(int length);
151
152 // Check if the path exists
153 static bool pathExists(const std::string_view p);
154
155 // Check if the path is a directory
156 static bool pathIsDirectory(const std::string_view p);
157
158 // create full path
159 static std::string getFullPath(const std::string_view p);
160
161 // rectify directory, applying convention "none"==""
162 static std::string rectifyDirectory(const std::string_view p);
163
164 // create unique non-existing path name starting with prefix. Loose equivalent of boost::filesystem::unique_path()
165 // in absence of such a function in std::filesystem
166 static std::string create_unique_path(const std::string_view prefix = "", int length = 16);
167
169};
170
171} // namespace utils
172} // namespace o2
173
174#endif //ALICEO2_STRINGUTILS_H
GLenum src
Definition glcorearb.h:1767
GLuint GLsizei GLsizei * length
Definition glcorearb.h:790
GLuint start
Definition glcorearb.h:469
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Common utility functions.
static void ltrim(std::string &s)
Definition StringUtils.h:39
static bool pathIsDirectory(const std::string_view p)
static void trim(std::string &s)
Definition StringUtils.h:71
static std::string rectifyDirectory(const std::string_view p)
static void ltrim(std::string &s, const std::string &start)
Definition StringUtils.h:44
static std::string ltrim_copy(const std::string &s, const std::string &start)
Definition StringUtils.h:89
static bool pathExists(const std::string_view p)
static std::string ltrim_copy(const std::string &s)
Definition StringUtils.h:82
static bool beginsWith(const std::string &s, const std::string &start)
static std::vector< std::string > tokenize(const std::string &src, char delim, bool trimToken=true, bool skipEmpty=true)
ClassDefNV(Str, 1)
static std::string trim_copy(const std::string &s)
static std::string rtrim_copy(const std::string &s)
static std::string concat_string(Ts const &... ts)
static void rtrim(std::string &s, const std::string &ending)
Definition StringUtils.h:60
static std::string getFullPath(const std::string_view p)
static std::string create_unique_path(const std::string_view prefix="", int length=16)
static bool endsWith(const std::string &s, const std::string &ending)
static void rtrim(std::string &s)
Definition StringUtils.h:55
static std::string getRandomString(int length)
static std::string rtrim_copy(const std::string &s, const std::string &ending)