5 #define __STDC_FORMAT_MACROS // Need this for PRId64
14 bool ReadInputLine(FILE *fi, std::string &line);
15 void SplitLine(
const std::string &line, std::vector<std::string> &args,
const std::string &separatorChars =
" \t",
16 const std::string "eChars =
"\"'",
const std::string &commentStartChars =
"#",
17 bool ignoreZeroLengthFields =
true);
19 std::string createFullPath(
const std::string &dir,
const std::string &file);
21 void abortWithMessage(
const std::string &msg);
23 bool parseAsInt(
const std::string &str,
int &number);
24 bool parseAsInt(
const std::string &str, int64_t &number);
25 bool parseAsDouble(
const std::string &str,
double &number);
26 bool parseAsDoubleVector(
const std::string &str, std::vector<double> &numbers, std::string &badField);
27 std::string doubleToString(
double x);
28 std::string doublesToString(
const std::vector<double> &values);
29 std::string intToString(
int x);
30 std::string intToString(int64_t x);
31 std::string stringToString(
const std::string &str);
33 std::string trim(
const std::string &str,
const std::string &trimChars =
" \t\r\n");
34 std::string replace(
const std::string &input,
const std::string &target,
const std::string &replacement);
36 std::string strprintf_cstr(
const char *format, ...);
38 #define strprintf(format, ...) strprintf_cstr(stringToString(format).c_str(), __VA_ARGS__ )
45 inline std::string strprintf_cstr(
const char *format, ...)
47 const int MAXBUFLEN = 8192;
48 char buf[MAXBUFLEN+1];
53 vsnprintf(buf, MAXBUFLEN, format, ap);
55 vsnprintf_s(buf, MAXBUFLEN, _TRUNCATE, format, ap);
60 return std::string(buf);
63 inline std::string doubleToString(
double x)
65 std::string s = strprintf(
"%.15g", x);
73 inline std::string intToString(
int x)
75 return strprintf(
"%d", x);
78 inline std::string intToString(int64_t x)
80 return strprintf(
"%" PRId64, x);
83 inline std::string stringToString(
const std::string &str)
88 inline bool endsWith(
const std::string &value,
const std::string &ending,
bool ignoreCase =
false)
90 if (ending.size() > value.size())
94 return std::equal(ending.rbegin(), ending.rend(), value.rbegin());
96 auto it1 = ending.rbegin();
97 auto it1end = ending.rend();
98 auto it2 = value.rbegin();
100 for ( ; it1 != it1end ; ++it1, ++it2)
102 if (tolower(*it1) != tolower(*it2))