34 inline bool contains(std::string
const &s, std::string
const &infix)
36 return s.find(infix) != std::string::npos;
39 inline bool contains(std::string
const &s,
char const infix)
41 return s.find(infix) != std::string::npos;
44 inline bool starts_with(std::string
const &s, std::string
const &prefix)
46 return (s.size() >= prefix.size()) &&
47 (0 == s.compare(0, prefix.size(), prefix));
50 inline bool starts_with(std::string
const &s,
char const prefix)
52 return !s.empty() && s[0] == prefix;
55 inline bool ends_with(std::string
const &s, std::string
const &
suffix)
57 return (s.size() >= suffix.size()) &&
58 (0 == s.compare(s.size() - suffix.size(), suffix.size(),
suffix));
61 inline bool ends_with(std::string
const &s,
char const suffix)
63 return !s.empty() && s.back() ==
suffix;
66 inline std::string replace_first(
68 std::string
const &target,
69 std::string
const &replacement)
71 std::string::size_type pos = s.find(target);
72 if (pos == std::string::npos)
74 s.replace(pos, target.size(), replacement);
80 inline std::string replace_last(
82 std::string
const &target,
83 std::string
const &replacement)
85 std::string::size_type pos = s.rfind(target);
86 if (pos == std::string::npos)
88 s.replace(pos, target.size(), replacement);
94 inline std::string replace_all_nonrecursively(
96 std::string
const &target,
97 std::string
const &replacement)
99 std::string::size_type pos = 0;
100 auto tsize = target.size();
101 auto rsize = replacement.size();
104 pos = s.find(target, pos);
105 if (pos == std::string::npos)
107 s.replace(pos, tsize, replacement);
114 inline std::string replace_all(
116 std::string
const &target,
117 std::string
const &replacement)
119 std::string::size_type pos = 0;
120 auto tsize = target.size();
122 auto rsize = replacement.size();
125 pos = s.find(target, pos);
126 if (pos == std::string::npos)
128 s.replace(pos, tsize, replacement);
133 pos += rsize - std::min(tsize - 1, rsize);
139 inline std::vector<std::string> split(
140 std::string
const &s,
141 std::string
const &delimiter,
142 bool includeDelimiter =
false)
144 std::vector<std::string> ret;
145 std::string::size_type pos, lastPos = 0, length = s.size();
146 while (lastPos < length + 1)
148 pos = s.find_first_of(delimiter, lastPos);
149 if (pos == std::string::npos)
152 includeDelimiter =
false;
156 ret.push_back(s.substr(
158 pos + (includeDelimiter ? delimiter.size() : 0) - lastPos));
166 inline std::string strip(std::string s, std::vector<char> to_remove)
168 for (
auto const &c : to_remove)
169 s.erase(std::remove(s.begin(), s.end(), c), s.end());
175 template <
typename F>
176 std::string trim(std::string
const &s, F &&to_remove)
178 auto begin = s.begin();
179 for (; begin != s.end(); ++begin)
181 if (!to_remove(*begin))
186 auto end = s.rbegin();
187 for (; end != s.rend(); ++end)
189 if (!to_remove(*end))
194 return s.substr(begin - s.begin(), end.base() - begin);
198 join(std::vector<std::string>
const &vs, std::string
const &delimiter)
207 std::ostringstream ss;
211 std::ostream_iterator<std::string>(ss, delimiter.c_str()));
212 ss << *(vs.end() - 1);
223 inline std::string removeSlashes(std::string s)
225 if (auxiliary::starts_with(s,
'/'))
227 s = auxiliary::replace_first(s,
"/",
"");
229 if (auxiliary::ends_with(s,
'/'))
231 s = auxiliary::replace_last(s,
"/",
"");
std::string suffix(Format f)
Determine the default filename suffix for a given storage format.
Definition: Format.cpp:70
Public definitions of openPMD-api.
Definition: Date.cpp:28