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) {

View File

@@ -316,6 +316,7 @@ __PIBYTEARRAY_SIMPLE_TYPE__(PIChar)
template<> inline uint piHash(const PIByteArray & ba) {return ba.hash();}
template<> inline void piSwap(PIByteArray & f, PIByteArray & s) {f.swap(s);}
#endif // PIBYTEARRAY_H

View File

@@ -504,13 +504,19 @@ public:
explicit PIObject(const PIString & name = PIString());
virtual ~PIObject();
#ifdef PIP_CXX11_SUPPORT
explicit PIObject(const PIObject & ) = delete;
void operator =(const PIObject & ) = delete;
#else
private:
explicit PIObject(const PIObject & );
void operator =(const PIObject & );
#endif
private:
uint _signature_;
public:
//! Returns object name

View File

@@ -770,5 +770,6 @@ PIString versionNormalize(const PIString & v);
template<> inline uint piHash(const PIString & s) {return s.hash();}
template<> inline void piSwap(PIString & f, PIString & s) {f.swap(s);}
#endif // PISTRING_H