fish-shell/src/util.h
Kurtis Rader 5c8763be0e restyle remaining modules to match project style
For this change I decided to bundle the remaining modules that need to be
resytyled because only two were large enough to warrant doing on their own.

Reduces lint errors from 225 to 162 (-28%). Line count from 3073 to 2465 (-20%).

Another step in resolving issue #2902.
2016-05-03 16:09:45 -07:00

50 lines
1.6 KiB
C++

// Generic utilities library.
#ifndef FISH_UTIL_H
#define FISH_UTIL_H
/// Returns the larger of two ints.
template <typename T>
inline T maxi(T a, T b) {
return a > b ? a : b;
}
/// Returns the smaller of two ints.
template <typename T>
inline T mini(T a, T b) {
return a < b ? a : b;
}
/// 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.
int wcsfilecmp(const wchar_t *a, const wchar_t *b);
/// Get the current time in microseconds since Jan 1, 1970.
long long get_time();
#endif