18 template<
class F1,
class F2 = F1,
class T1 = F1,
class T2 = T1>
27 PairToPair(F1
const& f1, F2
const& f2, T1
const& t1, T2
const& t2):
46 vsnprintf(str, 8192, fmt, args);
48 return std::string(str);
61 std::string
const& from,
62 std::string
const& to) {
63 std::string out = str;
64 int len = from.length();
65 for (
size_t pos; (pos = out.find(from)) != std::string::npos; ) {
66 out.replace(pos, len, to);
82 int len = strlen(str);
85 for (
int i = 0; i < n; i++) {
86 char const* arg = va_arg(args,
char const*);
87 int arglen = strlen(arg);
88 if (arglen <= len && strcmp(str + len - arglen, arg) == 0) {
103 #define debugPrintf(str) \
114 fprintf(stderr,
"%s[%d] %s >> %s", file, line, func, msg);
146 static int level = 0;
147 static int last_level = -5;
151 vsnprintf(str, 8192, fmt, args);
153 if (last_level == 1 && level_change == -1) {
154 printf(
" ...%s\n", str);
157 if (last_level == 1) printf(
"\n");
158 int level2 = level + (level_change == -1 ? -1 : 0);
159 for (
int i = 0; i < level2; i++) printf(
"| ");
160 printf(
"%s%s", (level_change == -1 ?
"..." :
""), str);
161 if (level_change != 1) printf(
"\n");
163 level += level_change;
164 last_level = level_change;
179 char const* s1 = f1.c_str();
180 char const* s2 = f2.c_str();
181 int l1 = f1.length();
182 int l2 = f2.length();
184 for (i1 = i2 = 0; i1 < l1 || i2 < l2; i1++, i2++) {
185 if (isdigit(s1[i1]) && isdigit(s2[i2])) {
186 int n1 = atoi(s1 + i1);
187 int n2 = atoi(s2 + i2);
190 while(i1 + 1 < l1 && isdigit(s1[i1 + 1])) i1++;
191 while(i2 + 1 < l2 && isdigit(s2[i2 + 1])) i2++;
195 return s1[i1] < s2[i2];
203 #endif // utility_H__
bool filenameCompare(std::string const &f1, std::string const &f2)
將兩個字串用人類習慣的檔名排序方式排序
有.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,...)
階層式輸出