]> git.saurik.com Git - wxWidgets.git/commitdiff
added functions to read/write several elements at once (patch 754986)
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 10 Jul 2003 11:47:27 +0000 (11:47 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 10 Jul 2003 11:47:27 +0000 (11:47 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21856 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/datistrm.tex
docs/latex/wx/datostrm.tex
include/wx/datstrm.h
src/common/datstrm.cpp

index a5124cac0418de49f41b9853d0cb36c7f8ae12c8..7a74e203cdf8b7a31a41b8f8b07a9c7a914f2bdd 100644 (file)
@@ -58,6 +58,7 @@ All:
 - added event sink argument to wxEvtHandler::Connect()
 - added support for POST method and alt ports to wxHTTP (Roger Chickering)
 - added wxSocket::IPAddress() (Chris Mellon)
+- wxDataStreams can read/write many elements at once (Mickael Gilabert)
 
 wxBase:
 
index 158ffffb2ee6c6d40ccb0569bd41f2a185b6c9e6..7f45970c4ce6905b15db375c562b095a855d285a 100644 (file)
@@ -78,30 +78,55 @@ big-endian order).
 
 Reads a single byte from the stream.
 
+\func{void}{Read8}{\param{wxUint8 *}{buffer}, \param{size\_t }{size}}
+
+Reads bytes from the stream in a specified buffer. The amount of
+bytes to read is specified by the {\it size} variable.
+
 \membersection{wxDataInputStream::Read16}
 
 \func{wxUint16}{Read16}{\void}
 
 Reads a 16 bit unsigned integer from the stream.
 
+\func{void}{Read16}{\param{wxUint16 *}{buffer}, \param{size\_t }{size}}
+
+Reads 16 bit unsigned integers from the stream in a specified buffer. the
+amount of 16 bit unsigned integer to read is specified by the {\it size} variable.
+
 \membersection{wxDataInputStream::Read32}
 
 \func{wxUint32}{Read32}{\void}
 
 Reads a 32 bit unsigned integer from the stream.
 
+\func{void}{Read32}{\param{wxUint32 *}{buffer}, \param{size\_t }{size}}
+
+Reads 32 bit unsigned integers from the stream in a specified buffer. the amount of
+32 bit unsigned integer to read is specified by the {\it size} variable.
+
 \membersection{wxDataInputStream::Read64}
 
 \func{wxUint64}{Read64}{\void}
 
 Reads a 64 bit unsigned integer from the stream.
 
+\func{void}{Read64}{\param{wxUint64 *}{buffer}, \param{size\_t }{size}}
+
+Reads 64 bit unsigned integers from the stream in a specified buffer. the amount of
+64 bit unsigned integer to read is specified by the {\it size} variable.
+
 \membersection{wxDataInputStream::ReadDouble}
 
 \func{double}{ReadDouble}{\void}
 
 Reads a double (IEEE encoded) from the stream.
 
+\func{void}{ReadDouble}{\param{double *}{buffer}, \param{size\_t }{size}}
+
+Reads double data (IEEE encoded) from the stream in a specified buffer. the amount of
+double to read is specified by the {\it size} variable.
+
 \membersection{wxDataInputStream::ReadString}\label{wxdatainputstreamreadstring}
 
 \func{wxString}{ReadString}{\void}
@@ -116,4 +141,3 @@ object passed to constructor and returns the result as wxString. You are
 responsible for using the same convertor as when writing the stream.
 
 See also \helpref{wxDataOutputStream::WriteString}{wxdataoutputstreamwritestring}.
-
index 5cb53a346727afcfcfa09652f58155841813140c..c904e34f10988439deef7571337061385bbbcda1 100644 (file)
@@ -60,30 +60,55 @@ little-endian order.
 
 Writes the single byte {\it i8} to the stream.
 
+\func{void}{Write8}{\param{const wxUint8 *}{buffer}, \param{size\_t }{size}}
+
+Writes an array of bytes to the stream. The amount of bytes to write is
+specified with the {\it size} variable.
+
 \membersection{wxDataOutputStream::Write16}
 
 \func{void}{Write16}{{\param wxUint16 }{i16}}
 
 Writes the 16 bit unsigned integer {\it i16} to the stream.
 
+\func{void}{Write16}{\param{const wxUint16 *}{buffer}, \param{size\_t }{size}}
+
+Writes an array of 16 bit unsigned integer to the stream. The amount of
+16 bit unsigned integer to write is specified with the {\it size} variable.
+
 \membersection{wxDataOutputStream::Write32}
 
 \func{void}{Write32}{{\param wxUint32 }{i32}}
 
 Writes the 32 bit unsigned integer {\it i32} to the stream.
 
+\func{void}{Write32}{\param{const wxUint32 *}{buffer}, \param{size\_t }{size}}
+
+Writes an array of 32 bit unsigned integer to the stream. The amount of
+32 bit unsigned integer to write is specified with the {\it size} variable.
+
 \membersection{wxDataOutputStream::Write64}
 
 \func{void}{Write64}{{\param wxUint64 }{i64}}
 
 Writes the 64 bit unsigned integer {\it i64} to the stream.
 
+\func{void}{Write64}{\param{const wxUint64 *}{buffer}, \param{size\_t }{size}}
+
+Writes an array of 64 bit unsigned integer to the stream. The amount of
+64 bit unsigned integer to write is specified with the {\it size} variable.
+
 \membersection{wxDataOutputStream::WriteDouble}
 
 \func{void}{WriteDouble}{{\param double }{f}}
 
 Writes the double {\it f} to the stream using the IEEE format.
 
+\func{void}{WriteDouble}{\param{const double *}{buffer}, \param{size\_t }{size}}
+
+Writes an array of double to the stream. The amount of double to write is
+specified with the {\it size} variable.
+
 \membersection{wxDataOutputStream::WriteString}\label{wxdataoutputstreamwritestring}
 
 \func{void}{WriteString}{{\param const wxString\&}{string}}
index b36eb1de0682d1e78cbc3dfbc0aba4669039d99b..c90ac629f2484857888d0d7e3713584af73c35d5 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        datstrm.h
 // Purpose:     Data stream classes
 // Author:      Guilhem Lavaux
-// Modified by:
+// Modified by: Mickael Gilabert
 // Created:     28/06/1998
 // RCS-ID:      $Id$
 // Copyright:   (c) Guilhem Lavaux
@@ -41,6 +41,12 @@ public:
     double ReadDouble();
     wxString ReadString();
 
+    void Read64(wxUint64 *buffer, size_t size);
+    void Read32(wxUint32 *buffer, size_t size);
+    void Read16(wxUint16 *buffer, size_t size);
+    void Read8(wxUint8 *buffer, size_t size);
+    void ReadDouble(double *buffer, size_t size);
+
     wxDataInputStream& operator>>(wxString& s);
     wxDataInputStream& operator>>(wxInt8& c);
     wxDataInputStream& operator>>(wxInt16& i);
@@ -83,6 +89,12 @@ public:
     void WriteDouble(double d);
     void WriteString(const wxString& string);
 
+    void Write64(const wxUint64 *buffer, size_t size);
+    void Write32(const wxUint32 *buffer, size_t size);
+    void Write16(const wxUint16 *buffer, size_t size);
+    void Write8(const wxUint8 *buffer, size_t size);
+    void WriteDouble(const double *buffer, size_t size);
+
     wxDataOutputStream& operator<<(const wxChar *string);
     wxDataOutputStream& operator<<(const wxString& string);
     wxDataOutputStream& operator<<(wxInt8 c);
index b0ef8302a254b680a0c9c328a9f2224772ccf3c2..a2c2aa55da11a219451039603fe6c325e2ac6050 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        datstrm.cpp
 // Purpose:     Data stream classes
 // Author:      Guilhem Lavaux
-// Modified by:
+// Modified by: Mickael Gilabert
 // Created:     28/06/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Guilhem Lavaux
@@ -126,6 +126,85 @@ wxString wxDataInputStream::ReadString()
     return wxEmptyString;
 }
 
+void wxDataInputStream::Read64(wxUint64 *buffer, size_t size)
+{
+  m_input->Read(buffer, size * 8);
+
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint64 v = wxUINT64_SWAP_ON_LE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+  else
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint64 v = wxUINT64_SWAP_ON_BE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+}
+
+void wxDataInputStream::Read32(wxUint32 *buffer, size_t size)
+{
+  m_input->Read(buffer, size * 4);
+
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint32 v = wxUINT32_SWAP_ON_LE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+else
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint32 v = wxUINT32_SWAP_ON_BE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+}
+
+void wxDataInputStream::Read16(wxUint16 *buffer, size_t size)
+{
+  m_input->Read(buffer, size * 2);
+
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint16 v = wxUINT16_SWAP_ON_LE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+  else
+  {
+    for (wxUint32 i=0; i<size; i++)
+    {
+      wxUint16 v = wxUINT16_SWAP_ON_BE(*buffer);
+      *(buffer++) = v;
+    }
+  }
+}
+
+void wxDataInputStream::Read8(wxUint8 *buffer, size_t size)
+{
+  m_input->Read(buffer, size);
+}
+
+void wxDataInputStream::ReadDouble(double *buffer, size_t size)
+{
+  for (wxUint32 i=0; i<size; i++)
+  {
+    *(buffer++) = ReadDouble();
+  }
+}
+
 wxDataInputStream& wxDataInputStream::operator>>(wxString& s)
 {
   s = ReadString();
@@ -274,6 +353,85 @@ void wxDataOutputStream::WriteDouble(double d)
   m_output->Write(buf, 10);
 }
 
+void wxDataOutputStream::Write64(const wxUint64 *buffer, size_t size)
+{
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint64 i64 = wxUINT64_SWAP_ON_LE(*buffer);
+      buffer++;
+      m_output->Write(&i64, 8);
+    }
+  }
+  else
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint64 i64 = wxUINT64_SWAP_ON_BE(*buffer);
+      buffer++;
+      m_output->Write(&i64, 8);
+    }
+  }
+}
+
+void wxDataOutputStream::Write32(const wxUint32 *buffer, size_t size)
+{
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint32 i32 = wxUINT32_SWAP_ON_LE(*buffer);
+      buffer++;
+      m_output->Write(&i32, 4);
+    }
+  }
+  else
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint32 i32 = wxUINT32_SWAP_ON_BE(*buffer);
+      buffer++;
+      m_output->Write(&i32, 4);
+    }
+  }
+}
+
+void wxDataOutputStream::Write16(const wxUint16 *buffer, size_t size)
+{
+  if (m_be_order)
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint16 i16 = wxUINT16_SWAP_ON_LE(*buffer);
+      buffer++;
+      m_output->Write(&i16, 2);
+    }
+  }
+  else
+  {
+    for (wxUint32 i=0; i<size ;i++)
+    {
+      wxUint16 i16 = wxUINT16_SWAP_ON_BE(*buffer);
+      buffer++;
+      m_output->Write(&i16, 2);
+    }
+  }
+}
+
+void wxDataOutputStream::Write8(const wxUint8 *buffer, size_t size)
+{
+  m_output->Write(buffer, size);
+}
+
+void wxDataOutputStream::WriteDouble(const double *buffer, size_t size)
+{
+  for (wxUint32 i=0; i<size; i++)
+  {
+    WriteDouble(*(buffer++));
+  }
+}
+
 wxDataOutputStream& wxDataOutputStream::operator<<(const wxChar *string)
 {
   Write32(wxStrlen(string));