diff options
Diffstat (limited to 'meowpp/utility.h')
-rw-r--r-- | meowpp/utility.h | 97 |
1 files changed, 28 insertions, 69 deletions
diff --git a/meowpp/utility.h b/meowpp/utility.h index 12909e9..14b7af1 100644 --- a/meowpp/utility.h +++ b/meowpp/utility.h @@ -1,110 +1,69 @@ -#ifndef UTILITY_H_ -#define UTILITY_H_ +#ifndef utility_H__ +#define utility_H__ + +#include <cstdlib> #include <string> -#include <stack> -#include <cctype> namespace meow{ - inline std::string stringPrintf(char const * fmt, ...); - inline std::string stringReplace(std::string str, - std::string const& from, - std::string const& to); - inline bool cstringEndWith(char const* str, int n, ...); -#define debugPrintf(...) \ - meow::debugPrintf_(\ - __FILE__,\ - __PRETTY_FUNCTION__,\ - __LINE__,\ - meow::stringPrintf(__VA_ARGS__).c_str()) - inline void debugPrintf_(char const* file, - char const* func, - size_t line, - char const* msg); - inline void messagePrintf(int level_change, char const* fmt, ...); - - static const double PI = 3.14159265358979323846264338327950288; - - inline double noEPS(double value, double eps = 1e-9); - inline double normalize(double lower, double upper, double value); - inline double denormalize(double lower, double upper, double ratio); - inline double ratioMapping(double l1, double u1, double m1, - double l2, double u2); - template<class T> - inline T inRange(T const& mn, T const& mx, T const& v); - template<class T> - inline T squ(T const& x); - - template<class T> - inline double average(T const& beg, T const& end, double sigs); - template<class T> - inline double average(T const& beg, T const& end, T const& p, double sigs); - //# //# === meow:: *Functios* in utility.h //# //# [options="header",width="100%",cols="1>s,5<,1<,10<",grid="rows"] //# |============================================================== //# |Name | Parameters | Return_Type | Description + + //# |stringPrintf |(char const * `fmt`, ...) | std::string //# |Format print to C++ string and return it + inline std::string stringPrintf(char const * fmt, ...); //# |stringReplace |(std::string `str`,\std::string const& //# `from`,\std::string const& `to`) | std::string //# |Return a string like `str`, but all `from` be replaced by `to` + inline std::string stringReplace(std::string str, + std::string const& from, + std::string const& to); //# |cstringEndWith |(char const* `str`,\int `n`, ...) | bool //# |Return whether `str` is end with one of the c-string you specify in //# the parameters or not + inline bool cstringEndWith(char const* str, int n, ...); //# |debugPrintf |(char const* `fmt`, ...) | void //# |Print debug message (file name, line number, ...etc) when `DEBUG` is //# defined +#define debugPrintf(...) \ + meow::debugPrintf_(\ + __FILE__,\ + __PRETTY_FUNCTION__,\ + __LINE__,\ + meow::stringPrintf(__VA_ARGS__).c_str()) + inline void debugPrintf_(char const* file, + char const* func, + size_t line, + char const* msg); //# |messagePrintf |(int `level_change`,\char const* `fmt`, ...) | void //# |階層式的訊息輸出 + inline void messagePrintf(int level_change, char const* fmt, ...); + - - //# |noEPS |(double `value`, double `eps` = 1e-9) | double | - //# 如果abs(輸入的數值) < eps, 則回傳0, 否則回傳輸入的數值 - - - //# |normalize |(double `lower`, double `upper`, \ double value) - //# | double | `(value - lower) / (upper - lower)` - - - //# |denormalize |(double `lower`, double `upper`, - //# \ double `ratio`) | double | `lower + (upper - lower) * ratio` - - - //# |ratioMapping |(double `l1`, double `u1`, - //# \double `m1`, double `l2`,\double `u2`) - //# | double | `denormalize(l2, u2, normalize(l1, u1, m1))` - - - //# |inRange<T> |(T const& `mn`, T const& `mx`, \ T const& `v`) | T | - //# `std::max(mn, std::min(mx, v))` - - - //# |squ<T> |(T const& `x`) | T| `x * x` - - - //# |average<T>|(T const& `beg`, T const& `end`, \ double `sigs`)| T| - //# 只將 `sigs` 個標準差以內的數據拿來取平均 + //# |filenameCompare |(std::string const& `f1`, std::string const& `f2`)|void + //# | 依照 `a0.txt < a1.txt < a2.txt < a10.txt` 的字串比較方法比較字串 + inline bool filenameCompare(std::string const& f1, std::string const& f2); - //# |average<T>|(T const& `beg`, T const& `end`, - //# \ T const& `p`, double `sigs`)| T| 同上, 不過這次用 `p` 來加權平均 //# |============================================================== + //# //# [NOTE] //# ==================================== //# * `stringReplace()` 不是用什麼好方法寫的因此執行效率很低請別虐待它. - //# * 額外附贈一個 `const double PI = 3.141592653589......` //# ==================================== //# //# ''' @@ -113,4 +72,4 @@ namespace meow{ #include "utility.hpp" -#endif // UTILITY_H_ +#endif // utility_H__ |