23# include <boost/dll/runtime_symbol_info.hpp>
26# include <linux/limits.h>
31# include <sys/types.h>
35using std::string_literals::operator
""s;
40static inline void ltrim(std::string& s) {
41 s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](
unsigned char ch) { return !std::isspace(ch); }));
45static inline void rtrim(std::string& s) {
46 s.erase(std::find_if(s.rbegin(), s.rend(), [](
unsigned char ch) { return !std::isspace(ch); }).base(), s.end());
50static inline void trim(std::string& s) {
75 std::stringstream ss(s);
87static inline bool isUInt(
const std::string& s) {
88 return !s.empty() && std::find_if(s.begin(), s.end(), [](
unsigned char c) { return !std::isdigit(c); }) == s.end();
92static inline bool isQuoted(
const std::string& s,
char c =
'"') {
93 if (s.length() < 2)
return false;
94 if (s[0] == c && *(s.end() - 1) == c)
return true;
103 return s.substr(1, s.length() - 2);
111 str.erase(std::remove_if(
str.begin(),
str.end(), [](
unsigned char x) { return std::isspace(x); }),
str.end());
117 std::string new_str =
str;
118 new_str.erase(std::remove_if(new_str.begin(), new_str.end(), [](
unsigned char x) { return std::isspace(x); }),
125 if (l.empty())
return "";
127 for (
auto iter = l.cbegin(); iter != l.cend() - 1; ++iter) {
str += *iter + div; }
128 return str + *(l.cend() - 1);
133static inline bool contains(
const T& container,
const typename T::value_type value) {
134 for (
auto&& elem : container) {
135 if (elem == value)
return true;
142 const char* homedir = std::getenv(
"HOME");
143 return (homedir && homedir[0] !=
'~') ? homedir : getpwuid(getuid())->pw_dir;
151 return boost::dll::program_location().remove_filename().string();
153 char result[PATH_MAX] = {};
154 ssize_t count = readlink(
"/proc/self/exe", result, PATH_MAX);
155 const char* path =
"";
156 if (count != -1) path = dirname(result);
167 const char* XDG_DATA_HOME = std::getenv(
"XDG_DATA_HOME");
168 return XDG_DATA_HOME ? (XDG_DATA_HOME[0] ==
'~' ?
homeDir() + std::string(XDG_DATA_HOME).substr(1)
169 : std::string(XDG_DATA_HOME))
177 static auto& chrs =
"0123456789"
178 "abcdefghijklmnopqrstuvwxyz"
179 "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
180 thread_local static std::mt19937 rg{ std::random_device{}() };
181 thread_local static std::uniform_int_distribution<std::string::size_type> pick(0,
sizeof(chrs) - 2);
184 while (length--) { s += chrs[pick(rg)]; }
204 std::ostringstream
str;
Utilities specified for mmCEsim.
Definition: utils.h:193
static std::string to_string(const T &x)
Change a number to string.
Definition: utils.h:203
str
Definition: version_bump.py:14
static std::string removeQuote(const std::string &s)
Definition: utils.h:99
T strAs(const std::string &s)
Definition: utils.h:74
static void ltrim(std::string &s)
Definition: utils.h:40
static std::string appDir()
Definition: utils.h:148
static std::string dataDir()
Definition: utils.h:162
static std::string randomString(std::string::size_type length)
Definition: utils.h:176
static void trim(std::string &s)
Definition: utils.h:50
static std::string homeDir()
Definition: utils.h:141
static std::string trim_copy(std::string s)
Definition: utils.h:68
static bool isUInt(const std::string &s)
Check if the string is an unsigned integer.
Definition: utils.h:87
static bool isQuoted(const std::string &s, char c='"')
Definition: utils.h:92
static std::string removeSpaceCopy(const std::string &str)
Definition: utils.h:116
static std::string ltrim_copy(std::string s)
Definition: utils.h:56
static std::string rtrim_copy(std::string s)
Definition: utils.h:62
static std::string stringVecAsString(const std::vector< std::string > &l, std::string div=" ")
Definition: utils.h:124
static bool contains(const T &container, const typename T::value_type value)
Definition: utils.h:133
static std::string & removeSpaceInPlace(std::string &str)
Definition: utils.h:110
static void rtrim(std::string &s)
Definition: utils.h:45