added wxIsSameDouble() which wraps double comparison in a pragmas disabling icc warning about it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35685 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2005-09-25 18:14:53 +00:00
parent 6cf2fb76fe
commit bc14c8b21f
3 changed files with 35 additions and 8 deletions

View File

@ -21,6 +21,7 @@
#include "wx/string.h"
#include "wx/fontenc.h"
#include "wx/hashmap.h"
#include "wx/math.h"
// ---------------------------------------------------------------------------
// forward declarations
@ -269,10 +270,14 @@ public:
wxRealPoint operator+(const wxRealPoint& pt) const { return wxRealPoint(x + pt.x, y + pt.y); }
wxRealPoint operator-(const wxRealPoint& pt) const { return wxRealPoint(x - pt.x, y - pt.y); }
bool operator==(const wxRealPoint& pt) const { return x == pt.x && y == pt.y; }
bool operator!=(const wxRealPoint& pt) const { return x != pt.x || y != pt.y; }
bool operator==(const wxRealPoint& pt) const
{
return wxIsSameDouble(x, pt.x) && wxIsSameDouble(y, pt.y);
}
bool operator!=(const wxRealPoint& pt) const { return !(*this == pt); }
};
class WXDLLEXPORT wxPoint
{
public:

View File

@ -76,5 +76,26 @@
#define wxIsNaN(x) ((x) != (x))
#endif
#ifdef __cplusplus
#ifdef __INTELC__
inline bool wxIsSameDouble(double x, double y)
{
// VZ: this warning, given for operators==() and !=() is not wrong, as ==
// shouldn't be used with doubles, but we get too many of them and
// removing these operators is probably not a good idea
#pragma warning(push)
// floating-point equality and inequality comparisons are unreliable
#pragma warning(disable: 1572)
return x == y;
#pragma warning(pop)
}
#else /* !__INTELC__ */
inline bool wxIsSameDouble(double x, double y) { return x == y; }
#endif /* __INTELC__/!__INTELC__ */
#endif /* __cplusplus */
#endif /* _WX_MATH_H_ */

View File

@ -36,6 +36,7 @@ using namespace std ;
#include "wx/string.h"
#include "wx/tokenzr.h"
#include "wx/math.h"
#include "wx/variant.h"
@ -55,7 +56,7 @@ public:
wxVariantDataList(const wxList& list);
~wxVariantDataList();
wxList& GetValue() const { return (wxList&) m_value; }
wxList& GetValue() const { return m_value; }
void SetValue(const wxList& value) ;
virtual void Copy(wxVariantData& data);
@ -454,7 +455,7 @@ bool wxVariantDataReal::Eq(wxVariantData& data) const
wxVariantDataReal& otherData = (wxVariantDataReal&) data;
return (otherData.m_value == m_value);
return wxIsSameDouble(otherData.m_value, m_value);
}
#if wxUSE_STD_IOSTREAM
@ -874,7 +875,7 @@ bool wxVariantDataVoidPtr::Write(wxSTD ostream& str) const
bool wxVariantDataVoidPtr::Write(wxString& str) const
{
str.Printf(wxT("%ld"), (long) m_value);
str.Printf(wxT("%p"), m_value);
return true;
}
@ -978,7 +979,7 @@ bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const
bool wxVariantDataWxObjectPtr::Write(wxString& str) const
{
str.Printf(wxT("%s(%ld)"), GetType().c_str(), (long) m_value);
str.Printf(wxT("%s(%p)"), GetType().c_str(), m_value);
return true;
}
@ -1391,8 +1392,8 @@ bool wxVariant::operator== (double value) const
double thisValue;
if (!Convert(&thisValue))
return false;
else
return (value == thisValue);
return wxIsSameDouble(value, thisValue);
}
bool wxVariant::operator!= (double value) const