2016-05-04 06:18:24 +08:00
|
|
|
// Generic utilities library.
|
2005-10-04 23:11:39 +08:00
|
|
|
#ifndef FISH_UTIL_H
|
|
|
|
#define FISH_UTIL_H
|
|
|
|
|
2016-05-04 06:18:24 +08:00
|
|
|
/// Returns the larger of two ints.
|
|
|
|
template <typename T>
|
|
|
|
inline T maxi(T a, T b) {
|
|
|
|
return a > b ? a : b;
|
2012-07-29 08:49:46 +08:00
|
|
|
}
|
2005-10-26 22:48:23 +08:00
|
|
|
|
2016-05-04 06:18:24 +08:00
|
|
|
/// Returns the smaller of two ints.
|
|
|
|
template <typename T>
|
|
|
|
inline T mini(T a, T b) {
|
|
|
|
return a < b ? a : b;
|
2012-07-29 08:49:46 +08:00
|
|
|
}
|
2005-10-26 22:48:23 +08:00
|
|
|
|
2016-05-04 06:18:24 +08:00
|
|
|
/// Compares two wide character strings with an (arguably) intuitive ordering. This function tries
|
|
|
|
/// to order strings in a way which is intuitive to humans with regards to sorting strings
|
|
|
|
/// containing numbers.
|
|
|
|
///
|
|
|
|
/// Most sorting functions would sort the strings 'file1.txt' 'file5.txt' and 'file12.txt' as:
|
|
|
|
///
|
|
|
|
/// file1.txt
|
|
|
|
/// file12.txt
|
|
|
|
/// file5.txt
|
|
|
|
///
|
|
|
|
/// This function regards any sequence of digits as a single entity when performing comparisons, so
|
|
|
|
/// the output is instead:
|
|
|
|
///
|
|
|
|
/// file1.txt
|
|
|
|
/// file5.txt
|
|
|
|
/// file12.txt
|
|
|
|
///
|
|
|
|
/// Which most people would find more intuitive.
|
|
|
|
///
|
|
|
|
/// This won't return the optimum results for numbers in bases higher than ten, such as hexadecimal,
|
|
|
|
/// but at least a stable sort order will result.
|
|
|
|
///
|
|
|
|
/// This function performs a two-tiered sort, where difference in case and in number of leading
|
|
|
|
/// zeroes in numbers only have effect if no other differences between strings are found. This way,
|
|
|
|
/// a 'file1' and 'File1' will not be considered identical, and hence their internal sort order is
|
|
|
|
/// not arbitrary, but the names 'file1', 'File2' and 'file3' will still be sorted in the order
|
|
|
|
/// given above.
|
2012-11-19 08:30:30 +08:00
|
|
|
int wcsfilecmp(const wchar_t *a, const wchar_t *b);
|
2005-09-20 21:26:39 +08:00
|
|
|
|
2016-05-04 06:18:24 +08:00
|
|
|
/// Get the current time in microseconds since Jan 1, 1970.
|
2005-09-20 21:26:39 +08:00
|
|
|
long long get_time();
|
2005-10-04 23:11:39 +08:00
|
|
|
|
|
|
|
#endif
|