]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/datstrm.h
Don't define __STRICT_ANSI__, we should build both with and without it.
[wxWidgets.git] / include / wx / datstrm.h
index 362f3b4c916f8dcb3fdab432d09a4592972ee192..477da30ec65d740714abfe65d2376b4e257d7bfa 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Guilhem Lavaux
 // Modified by: Mickael Gilabert
 // Created:     28/06/1998
-// RCS-ID:      $Id$
 // Copyright:   (c) Guilhem Lavaux
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -24,6 +23,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 +59,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 +88,7 @@ public:
     wxUint16 Read16();
     wxUint8 Read8();
     double ReadDouble();
+    float ReadFloat();
     wxString ReadString();
 
 #if wxHAS_INT64
@@ -81,6 +107,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 +152,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 +171,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);