19 template<
class F1,
class F2 = F1,
class T1 = F1,
class T2 = T1>
28 PairToPair(F1
const& f1, F2
const& f2, T1
const& t1, T2
const& t2):
47 vsnprintf(str, 8192, fmt, args);
49 return std::string(str);
62 std::string
const& from,
63 std::string
const& to) {
64 std::string out = str;
65 int len = from.length();
66 for (
size_t pos; (pos = out.find(from)) != std::string::npos; ) {
67 out.replace(pos, len, to);
83 int len = strlen(str);
86 for (
int i = 0; i < n; i++) {
87 char const* arg = va_arg(args,
char const*);
88 int arglen = strlen(arg);
89 if (arglen <= len && strcmp(str + len - arglen, arg) == 0) {
104 #define debugPrintf(str) \
115 fprintf(stderr,
"%s[%d] %s >> %s", file, line, func, msg);
147 static int level = 0;
148 static int last_level = -5;
152 vsnprintf(str, 8192, fmt, args);
154 if (last_level == 1 && level_change == -1) {
155 printf(
" ...%s\n", str);
158 if (last_level == 1) printf(
"\n");
159 int level2 = level + (level_change == -1 ? -1 : 0);
160 for (
int i = 0; i < level2; i++) printf(
"| ");
161 printf(
"%s%s", (level_change == -1 ?
"..." :
""), str);
162 if (level_change != 1) printf(
"\n");
164 level += level_change;
165 last_level = level_change;
180 char const* s1 = f1.c_str();
181 char const* s2 = f2.c_str();
182 int l1 = f1.length();
183 int l2 = f2.length();
185 for (i1 = i2 = 0; i1 < l1 || i2 < l2; i1++, i2++) {
186 if (isdigit(s1[i1]) && isdigit(s2[i2])) {
187 int n1 = atoi(s1 + i1);
188 int n2 = atoi(s2 + i2);
191 while(i1 + 1 < l1 && isdigit(s1[i1 + 1])) i1++;
192 while(i2 + 1 < l2 && isdigit(s2[i2 + 1])) i2++;
196 return s1[i1] < s2[i2];
204 #endif // utility_H__
bool filenameCompare(std::string const &f1, std::string const &f2)
將兩個字串用人類習慣的檔名排序方式排序
A structur with memember .from.first , .from.second , .to.first , .to.second.
bool operator==(PairToPair const &p) const
bool cstringEndWith(char const *str, int n,...)
檢查給定字串的結尾是否符合給定的數個patterns中的一個
void debugPrintf_(char const *file, char const *func, size_t line, char const *msg)
std::string stringReplace(std::string str, std::string const &from, std::string const &to)
將輸入字串中的某個pattern取代成另一個pattern
PairToPair(F1 const &f1, F2 const &f2, T1 const &t1, T2 const &t2)
std::string stringPrintf(char const *fmt,...)
類似C的printf, 不過是將格式化的字串丟到 std::string 裡回傳
PairToPair(PairToPair const &pp)
void messagePrintf(int level_change, char const *fmt,...)
階層式輸出