added functions to read/write several elements at once (patch 754986)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21856 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-07-10 11:47:27 +00:00
parent 019abbf209
commit 53663be8a5
5 changed files with 223 additions and 3 deletions

View 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));