optimize piSwap and c++11 improvments

This commit is contained in:
2020-07-16 12:48:20 +03:00
parent 835e6c7773
commit 32f16fdb64
8 changed files with 216 additions and 23 deletions

View File

@@ -255,9 +255,15 @@ typedef unsigned long long ullong;
typedef long long llong;
typedef long double ldouble;
#ifdef PIP_CXX11_SUPPORT
#define piMove(v) std::move(v)
#else
#define piMove(v) v
#endif
/*! \brief Templated function for swap two values
* \details Example:\n \snippet piincludes.cpp swap */
template<typename T> inline void piSwap(T & f, T & s) {T t = f; f = s; s = t;}
template<typename T> inline void piSwap(T & f, T & s) {T t(piMove(f)); f = piMove(s); s = piMove(t);}
/*! \brief Templated function for swap two values without "="
* \details Example:\n \snippet piincludes.cpp swapBinary */
@@ -294,6 +300,10 @@ template<> inline void piSwapBinary(const void *& f, const void *& s) {
}
}
template<> inline void piSwap(double & f, double & s) {piSwapBinary<double>(f, s);}
template<> inline void piSwap(ldouble & f, ldouble & s) {piSwapBinary<ldouble>(f, s);}
/*! \brief Function for compare two values without "=" by raw content
* \details Example:\n \snippet piincludes.cpp compareBinary */
inline bool piCompareBinary(const void * f, const void * s, size_t size) {