]>
git.saurik.com Git - wxWidgets.git/blob - src/common/datstrm.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Data stream classes 
   4 // Author:      Guilhem Lavaux 
   8 // Copyright:   (c) Guilhem Lavaux 
   9 // Licence:     wxWindows license 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "datstrm.h" 
  16 // For compilers that support precompilation, includes "wx.h". 
  17 #include "wx/wxprec.h" 
  25 #include "wx/datstrm.h" 
  27 // --------------------------------------------------------------------------- 
  29 // --------------------------------------------------------------------------- 
  31 wxDataInputStream::wxDataInputStream(wxInputStream
& s
) 
  32   : m_input(&s
), m_be_order(FALSE
) 
  36 wxDataInputStream::~wxDataInputStream() 
  40 wxUint32 
wxDataInputStream::Read32() 
  44   m_input
->Read(&i32
, 4); 
  47     return wxUINT32_SWAP_ON_LE(i32
); 
  49     return wxUINT32_SWAP_ON_BE(i32
); 
  52 wxUint16 
wxDataInputStream::Read16() 
  56   m_input
->Read(&i16
, 2); 
  59     return wxUINT16_SWAP_ON_LE(i16
); 
  61     return wxUINT16_SWAP_ON_BE(i16
); 
  64 wxUint8 
wxDataInputStream::Read8() 
  68   m_input
->Read(&buf
, 1); 
  72 // Must be at global scope for VC++ 5 
  73 extern "C" double ConvertFromIeeeExtended(const unsigned char *bytes
); 
  75 double wxDataInputStream::ReadDouble() 
  80   m_input
->Read(buf
, 10); 
  81   return ConvertFromIeeeExtended((unsigned char *)buf
); 
  87 wxString 
wxDataInputStream::ReadString() 
  96     char *tmp 
= new char[len 
+ 1]; 
  97     m_input
->Read(tmp
, len
); 
 103     m_input
->Read(s
.GetWriteBuf(len
), len
); 
 109     return wxEmptyString
; 
 112 wxDataInputStream
& wxDataInputStream::operator>>(wxString
& s
) 
 118 wxDataInputStream
& wxDataInputStream::operator>>(wxInt8
& c
) 
 124 wxDataInputStream
& wxDataInputStream::operator>>(wxInt16
& i
) 
 126   i 
= (wxInt16
)Read16(); 
 130 wxDataInputStream
& wxDataInputStream::operator>>(wxInt32
& i
) 
 132   i 
= (wxInt32
)Read32(); 
 136 wxDataInputStream
& wxDataInputStream::operator>>(wxUint8
& c
) 
 142 wxDataInputStream
& wxDataInputStream::operator>>(wxUint16
& i
) 
 148 wxDataInputStream
& wxDataInputStream::operator>>(wxUint32
& i
) 
 154 wxDataInputStream
& wxDataInputStream::operator>>(double& i
) 
 160 wxDataInputStream
& wxDataInputStream::operator>>(float& f
) 
 162   f 
= (float)ReadDouble(); 
 166 // --------------------------------------------------------------------------- 
 167 // wxDataOutputStream 
 168 // --------------------------------------------------------------------------- 
 170 wxDataOutputStream::wxDataOutputStream(wxOutputStream
& s
) 
 171   : m_output(&s
), m_be_order(FALSE
) 
 175 wxDataOutputStream::~wxDataOutputStream() 
 179 void wxDataOutputStream::Write32(wxUint32 i
) 
 184     i32 
= wxUINT32_SWAP_ON_LE(i
); 
 186     i32 
= wxUINT32_SWAP_ON_BE(i
); 
 187   m_output
->Write(&i32
, 4); 
 190 void wxDataOutputStream::Write16(wxUint16 i
) 
 195     i16 
= wxUINT16_SWAP_ON_LE(i
); 
 197     i16 
= wxUINT16_SWAP_ON_BE(i
); 
 199   m_output
->Write(&i16
, 2); 
 202 void wxDataOutputStream::Write8(wxUint8 i
) 
 204   m_output
->Write(&i
, 1); 
 207 void wxDataOutputStream::WriteString(const wxString
& string
) 
 209   const wxWX2MBbuf buf 
= string
.mb_str(); 
 210   Write32(string
.Len()); 
 211   if (string
.Len() > 0) 
 212       m_output
->Write(buf
, string
.Len()); 
 215 // Must be at global scope for VC++ 5 
 216 extern "C" void ConvertToIeeeExtended(double num
, unsigned char *bytes
); 
 218 void wxDataOutputStream::WriteDouble(double d
) 
 223   ConvertToIeeeExtended(d
, (unsigned char *)buf
); 
 226 # pragma warning "wxDataOutputStream::WriteDouble() not using IeeeExtended - will not work!" 
 230   m_output
->Write(buf
, 10); 
 233 wxDataOutputStream
& wxDataOutputStream::operator<<(const wxChar 
*string
) 
 235   Write32(wxStrlen(string
)); 
 236   m_output
->Write((const char *)string
, wxStrlen(string
)*sizeof(wxChar
)); 
 240 wxDataOutputStream
& wxDataOutputStream::operator<<(wxString
& string
) 
 246 wxDataOutputStream
& wxDataOutputStream::operator<<(wxInt8 c
) 
 252 wxDataOutputStream
& wxDataOutputStream::operator<<(wxInt16 i
) 
 254   Write16((wxUint16
)i
); 
 258 wxDataOutputStream
& wxDataOutputStream::operator<<(wxInt32 i
) 
 260   Write32((wxUint32
)i
); 
 264 wxDataOutputStream
& wxDataOutputStream::operator<<(wxUint8 c
) 
 270 wxDataOutputStream
& wxDataOutputStream::operator<<(wxUint16 i
) 
 276 wxDataOutputStream
& wxDataOutputStream::operator<<(wxUint32 i
) 
 282 wxDataOutputStream
& wxDataOutputStream::operator<<(double f
) 
 288 wxDataOutputStream
& wxDataOutputStream::operator<<(float f
) 
 290   WriteDouble((double)f
);