X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/61eb6bb67389fdb59484ee710d20d8689f2cd3f6..438959cca892a7651634cc3a7aad4819ac49b23c:/include/wx/datstrm.h diff --git a/include/wx/datstrm.h b/include/wx/datstrm.h index e231f4f761..3a6136fe4b 100644 --- a/include/wx/datstrm.h +++ b/include/wx/datstrm.h @@ -24,6 +24,28 @@ class WXDLLIMPEXP_BASE wxDataStreamBase public: void BigEndianOrdered(bool be_order) { m_be_order = be_order; } + // By default we use extended precision (80 bit) format for both float and + // doubles. Call this function to switch to alternative representation in + // which IEEE 754 single precision (32 bits) is used for floats and double + // precision (64 bits) is used for doubles. + void UseBasicPrecisions() + { +#if wxUSE_APPLE_IEEE + m_useExtendedPrecision = false; +#endif // wxUSE_APPLE_IEEE + } + + // UseExtendedPrecision() is not very useful as it corresponds to the + // default value, only call it in your code if you want the compilation + // fail with the error when using wxWidgets library compiled without + // extended precision support. +#if wxUSE_APPLE_IEEE + void UseExtendedPrecision() + { + m_useExtendedPrecision = true; + } +#endif // wxUSE_APPLE_IEEE + #if wxUSE_UNICODE void SetConv( const wxMBConv &conv ); wxMBConv *GetConv() const { return m_conv; } @@ -38,6 +60,10 @@ protected: bool m_be_order; +#if wxUSE_APPLE_IEEE + bool m_useExtendedPrecision; +#endif // wxUSE_APPLE_IEEE + #if wxUSE_UNICODE wxMBConv *m_conv; #endif @@ -63,6 +89,7 @@ public: wxUint16 Read16(); wxUint8 Read8(); double ReadDouble(); + float ReadFloat(); wxString ReadString(); #if wxHAS_INT64 @@ -81,6 +108,7 @@ public: void Read16(wxUint16 *buffer, size_t size); void Read8(wxUint8 *buffer, size_t size); void ReadDouble(double *buffer, size_t size); + void ReadFloat(float *buffer, size_t size); wxDataInputStream& operator>>(wxString& s); wxDataInputStream& operator>>(wxInt8& c); @@ -97,7 +125,7 @@ public: wxDataInputStream& operator>>(wxULongLong& i); wxDataInputStream& operator>>(wxLongLong& i); #endif - wxDataInputStream& operator>>(double& i); + wxDataInputStream& operator>>(double& d); wxDataInputStream& operator>>(float& f); protected: @@ -125,6 +153,7 @@ public: void Write16(wxUint16 i); void Write8(wxUint8 i); void WriteDouble(double d); + void WriteFloat(float f); void WriteString(const wxString& string); #if wxHAS_INT64 @@ -143,6 +172,7 @@ public: void Write16(const wxUint16 *buffer, size_t size); void Write8(const wxUint8 *buffer, size_t size); void WriteDouble(const double *buffer, size_t size); + void WriteFloat(const float *buffer, size_t size); wxDataOutputStream& operator<<(const wxString& string); wxDataOutputStream& operator<<(wxInt8 c); @@ -159,7 +189,7 @@ public: wxDataOutputStream& operator<<(const wxULongLong &i); wxDataOutputStream& operator<<(const wxLongLong &i); #endif - wxDataOutputStream& operator<<(double f); + wxDataOutputStream& operator<<(double d); wxDataOutputStream& operator<<(float f); protected: