Add IEEE 754 single/double precision support to wxDataStream classes.
Allow to optionally raed/write float/double values in IEEE 754 single/double precision formats, respectively, instead of always using the extended precision format for both of them. This makes the code more flexible, allowing for better interoperability with the other programs, and also allows to implement floating point functions in these classes even when wxUSE_APPLE_IEEE is turned off (as can be the case because of the licencing concerns for the code in extended.c). Closes #10625. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73938 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -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);
|
||||
@@ -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);
|
||||
|
Reference in New Issue
Block a user