X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e38fd1fb0d8c4508383f3d9ce2f3ae0c6d39cfd..6d9022fe3bb50a75b9b5eaf5cf32558e518ba310:/include/wx/longlong.h?ds=sidebyside diff --git a/include/wx/longlong.h b/include/wx/longlong.h index be9a66619e..852168dc24 100644 --- a/include/wx/longlong.h +++ b/include/wx/longlong.h @@ -68,6 +68,8 @@ #endif #elif defined(__VISAGECPP__) && __IBMCPP__ >= 400 #define wxLongLong_t long long +#elif defined(__DJGPP__) && __DJGPP__ >= 2 + #define wxLongLong_t long long #else // no native long long type // both warning and pragma warning are not portable, but at least an // unknown pragma should never be an error - except that, actually, some @@ -94,6 +96,7 @@ #endif class WXDLLEXPORT wxLongLongWx; + class WXDLLEXPORT wxULongLongWx; #if defined(__VISUALC__) && !defined(__WIN32__) #define wxLongLong wxLongLongWx #define wxULongLong wxULongLongWx @@ -177,11 +180,6 @@ public: // convert to native long long wxLongLong_t GetValue() const { return m_ll; } - // implicit conversion for times when we want a native type - // or wxLongLong, NOT wxLongLongNative and without having - // to ifdef user code for each use. - operator wxLongLong_t() const { return m_ll; } - // convert to long with range checking in the debug mode (only!) long ToLong() const { @@ -377,16 +375,12 @@ public: // convert to ulong with range checking in the debug mode (only!) unsigned long ToULong() const { - wxASSERT_MSG( (m_ll >= LONG_MIN) && (m_ll <= LONG_MAX), + wxASSERT_MSG( m_ll <= LONG_MAX, _T("wxULongLong to long conversion loss of precision") ); return (unsigned long)m_ll; } - // don't provide implicit conversion to unsigned wxLongLong_t or we - // will have an ambiguity for all arithmetic operations - //operator wxULongLong_t() const { return m_ll; } - // operations // addition wxULongLongNative operator+(const wxULongLongNative& ll) const @@ -786,7 +780,7 @@ public: // convert to long with range checking in the debug mode (only!) unsigned long ToULong() const { - wxASSERT_MSG( (m_hi == 0l), + wxASSERT_MSG( m_hi == 0ul, _T("wxULongLong to long conversion loss of precision") ); return (unsigned long)m_lo; @@ -805,7 +799,7 @@ public: // post increment operator wxULongLongWx& operator++(int) { return ++(*this); } - // subraction + // subraction (FIXME: should return wxLongLong) wxULongLongWx operator-(const wxULongLongWx& ll) const; wxULongLongWx& operator-=(const wxULongLongWx& ll); @@ -883,7 +877,7 @@ public: private: // long is at least 32 bits, so represent our 64bit number as 2 longs - unsigned long m_hi + unsigned long m_hi; unsigned long m_lo; #ifdef wxLONGLONG_TEST_MODE @@ -903,23 +897,31 @@ private: // ---------------------------------------------------------------------------- inline bool operator<(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator>(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator<=(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator>=(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator==(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator!=(long l, const wxLongLong& ll) { return ll > l; } +inline bool operator>(long l, const wxLongLong& ll) { return ll < l; } +inline bool operator<=(long l, const wxLongLong& ll) { return ll >= l; } +inline bool operator>=(long l, const wxLongLong& ll) { return ll <= l; } +inline bool operator==(long l, const wxLongLong& ll) { return ll == l; } +inline bool operator!=(long l, const wxLongLong& ll) { return ll != l; } inline wxLongLong operator+(long l, const wxLongLong& ll) { return ll + l; } -inline wxLongLong operator-(long l, const wxLongLong& ll) { return ll - l; } +inline wxLongLong operator-(long l, const wxLongLong& ll) +{ + return wxLongLong(l) - ll; +} -inline bool operator<(unsigned long l, const wxULongLong& ll) { return ll > l; } -inline bool operator>(unsigned long l, const wxULongLong& ll) { return ll > l; } -inline bool operator<=(unsigned long l, const wxULongLong& ll) { return ll > l; } -inline bool operator>=(unsigned long l, const wxULongLong& ll) { return ll > l; } -inline bool operator==(unsigned long l, const wxULongLong& ll) { return ll > l; } -inline bool operator!=(unsigned long l, const wxULongLong& ll) { return ll > l; } +inline bool operator<(unsigned long l, const wxULongLong& ull) { return ull > l; } +inline bool operator>(unsigned long l, const wxULongLong& ull) { return ull < l; } +inline bool operator<=(unsigned long l, const wxULongLong& ull) { return ull >= l; } +inline bool operator>=(unsigned long l, const wxULongLong& ull) { return ull <= l; } +inline bool operator==(unsigned long l, const wxULongLong& ull) { return ull == l; } +inline bool operator!=(unsigned long l, const wxULongLong& ull) { return ull != l; } -inline wxULongLong operator+(unsigned long l, const wxULongLong& ll) { return ll + l; } -inline wxULongLong operator-(unsigned long l, const wxULongLong& ll) { return ll - l; } +inline wxULongLong operator+(unsigned long l, const wxULongLong& ull) { return ull + l; } + +// FIXME: this should return wxLongLong +inline wxULongLong operator-(unsigned long l, const wxULongLong& ull) +{ + return wxULongLong(l) - ull; +} #endif // _WX_LONGLONG_H