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 "GPUCommonRtypes.h"
24
25namespace o2
26{
27namespace utils
28{
29
30struct Str {
31
32 // Code for trimming coming from https://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
33
38 static inline void ltrim(std::string& s)
39 {
40 s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { return !std::isspace(ch); }));
41 }
42
43 static inline void ltrim(std::string& s, const std::string& start)
44 {
45 if (beginsWith(s, start)) {
46 s.erase(0, start.size());
47 }
48 }
49
54 static inline void rtrim(std::string& s)
55 {
56 s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) { return !std::isspace(ch); }).base(), s.end());
57 }
58
59 static inline void rtrim(std::string& s, const std::string& ending)
60 {
61 if (endsWith(s, ending)) {
62 s.erase(s.size() - ending.size(), ending.size());
63 }
64 }
65
70 static inline void trim(std::string& s)
71 {
72 ltrim(s);
73 rtrim(s);
74 }
75
81 static inline std::string ltrim_copy(const std::string& s)
82 {
83 std::string ss = s;
84 ltrim(ss);
85 return ss;
86 }
87
88 static inline std::string ltrim_copy(const std::string& s, const std::string& start)
89 {
90 std::string ss = s;
91 ltrim(ss, start);
92 return ss;
93 }
94
100 static inline std::string rtrim_copy(const std::string& s)
101 {
102 std::string ss = s;
103 rtrim(ss);
104 return ss;
105 }
106
107 static inline std::string rtrim_copy(const std::string& s, const std::string& ending)
108 {
109 std::string ss = s;
110 rtrim(ss, ending);
111 return ss;
112 }
113
119 static inline std::string trim_copy(const std::string& s)
120 {
121 std::string ss = s;
122 rtrim(ss);
123 return ss;
124 }
125
126 static inline bool endsWith(const std::string& s, const std::string& ending)
127 {
128 return (ending.size() > s.size()) ? false : std::equal(ending.rbegin(), ending.rend(), s.rbegin());
129 }
130
131 static inline bool beginsWith(const std::string& s, const std::string& start)
132 {
133 return (start.size() > s.size()) ? false : std::equal(start.begin(), start.end(), s.begin());
134 }
135
136 // return vector of tokens from the string with provided delimiter. If requested, trim the spaces from tokens
137 static std::vector<std::string> tokenize(const std::string& src, char delim, bool trimToken = true, bool skipEmpty = true);
138
139 // concatenate arbitrary number of strings
140 template <typename... Ts>
141 static std::string concat_string(Ts const&... ts)
142 {
143 std::stringstream s;
144 (s << ... << ts);
145 return s.str();
146 }
147
148 // replace all occurencies of from by to, return count
149 static int replaceAll(std::string& s, const std::string& from, const std::string& to);
150
151 // generate random string of given length, suitable for file names
152 static std::string getRandomString(int length);
153
154 // Check if the path exists
155 static bool pathExists(const std::string_view p);
156
157 // Check if the path is a directory
158 static bool pathIsDirectory(const std::string_view p);
159
160 // create full path
161 static std::string getFullPath(const std::string_view p);
162
163 // rectify directory, applying convention "none"==""
164 static std::string rectifyDirectory(const std::string_view p);
165
166 // create unique non-existing path name starting with prefix. Loose equivalent of boost::filesystem::unique_path()
167 // in absence of such a function in std::filesystem
168 static std::string create_unique_path(const std::string_view prefix = "", int length = 16);
169
171};
172
173} // namespace utils
174} // namespace o2
175
176#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:38
static bool pathIsDirectory(const std::string_view p)
static void trim(std::string &s)
Definition StringUtils.h:70
static std::string rectifyDirectory(const std::string_view p)
static void ltrim(std::string &s, const std::string &start)
Definition StringUtils.h:43
static std::string ltrim_copy(const std::string &s, const std::string &start)
Definition StringUtils.h:88
static bool pathExists(const std::string_view p)
static std::string ltrim_copy(const std::string &s)
Definition StringUtils.h:81
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 int replaceAll(std::string &s, const std::string &from, const std::string &to)
static std::string concat_string(Ts const &... ts)
static void rtrim(std::string &s, const std::string &ending)
Definition StringUtils.h:59
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:54
static std::string getRandomString(int length)
static std::string rtrim_copy(const std::string &s, const std::string &ending)