1/////////////////////////////////////////////////////////////////////////////
2// Name:        datstrm.h
3// Purpose:     Data stream classes
4// Author:      Guilhem Lavaux
5// Modified by: Mickael Gilabert
6// Created:     28/06/1998
7// RCS-ID:      $Id: datstrm.h 38576 2006-04-05 16:10:08Z VZ $
8// Copyright:   (c) Guilhem Lavaux
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_DATSTREAM_H_
13#define _WX_DATSTREAM_H_
14
15#include "wx/stream.h"
16#include "wx/longlong.h"
17#include "wx/convauto.h"
18
19#if wxUSE_STREAMS
20
21class WXDLLIMPEXP_BASE wxDataInputStream
22{
23public:
24#if wxUSE_UNICODE
25    wxDataInputStream(wxInputStream& s, const wxMBConv& conv = wxConvAuto());
26#else
27    wxDataInputStream(wxInputStream& s);
28#endif
29    ~wxDataInputStream();
30
31    bool IsOk() { return m_input->IsOk(); }
32
33#if wxHAS_INT64
34    wxUint64 Read64();
35#endif
36#if wxUSE_LONGLONG
37    wxLongLong ReadLL();
38#endif
39    wxUint32 Read32();
40    wxUint16 Read16();
41    wxUint8 Read8();
42    double ReadDouble();
43    wxString ReadString();
44
45#if wxHAS_INT64
46    void Read64(wxUint64 *buffer, size_t size);
47    void Read64(wxInt64 *buffer, size_t size);
48#endif
49#if defined(wxLongLong_t) && wxUSE_LONGLONG
50    void Read64(wxULongLong *buffer, size_t size);
51    void Read64(wxLongLong *buffer, size_t size);
52#endif
53#if wxUSE_LONGLONG
54    void ReadLL(wxULongLong *buffer, size_t size);
55    void ReadLL(wxLongLong *buffer, size_t size);
56#endif
57    void Read32(wxUint32 *buffer, size_t size);
58    void Read16(wxUint16 *buffer, size_t size);
59    void Read8(wxUint8 *buffer, size_t size);
60    void ReadDouble(double *buffer, size_t size);
61
62    wxDataInputStream& operator>>(wxString& s);
63    wxDataInputStream& operator>>(wxInt8& c);
64    wxDataInputStream& operator>>(wxInt16& i);
65    wxDataInputStream& operator>>(wxInt32& i);
66    wxDataInputStream& operator>>(wxUint8& c);
67    wxDataInputStream& operator>>(wxUint16& i);
68    wxDataInputStream& operator>>(wxUint32& i);
69#if wxHAS_INT64
70    wxDataInputStream& operator>>(wxUint64& i);
71    wxDataInputStream& operator>>(wxInt64& i);
72#endif
73#if defined(wxLongLong_t) && wxUSE_LONGLONG
74    wxDataInputStream& operator>>(wxULongLong& i);
75    wxDataInputStream& operator>>(wxLongLong& i);
76#endif
77    wxDataInputStream& operator>>(double& i);
78    wxDataInputStream& operator>>(float& f);
79
80    void BigEndianOrdered(bool be_order) { m_be_order = be_order; }
81
82protected:
83    wxInputStream *m_input;
84    bool m_be_order;
85#if wxUSE_UNICODE
86    wxMBConv *m_conv;
87#endif
88
89    DECLARE_NO_COPY_CLASS(wxDataInputStream)
90};
91
92class WXDLLIMPEXP_BASE wxDataOutputStream
93{
94public:
95#if wxUSE_UNICODE
96    wxDataOutputStream(wxOutputStream& s, const wxMBConv& conv = wxConvAuto());
97#else
98    wxDataOutputStream(wxOutputStream& s);
99#endif
100    ~wxDataOutputStream();
101
102    bool IsOk() { return m_output->IsOk(); }
103
104#if wxHAS_INT64
105    void Write64(wxUint64 i);
106    void Write64(wxInt64 i);
107#endif
108#if wxUSE_LONGLONG
109    void WriteLL(const wxLongLong &ll);
110    void WriteLL(const wxULongLong &ll);
111#endif
112    void Write32(wxUint32 i);
113    void Write16(wxUint16 i);
114    void Write8(wxUint8 i);
115    void WriteDouble(double d);
116    void WriteString(const wxString& string);
117
118#if wxHAS_INT64
119    void Write64(const wxUint64 *buffer, size_t size);
120    void Write64(const wxInt64 *buffer, size_t size);
121#endif
122#if defined(wxLongLong_t) && wxUSE_LONGLONG
123    void Write64(const wxULongLong *buffer, size_t size);
124    void Write64(const wxLongLong *buffer, size_t size);
125#endif
126#if wxUSE_LONGLONG
127    void WriteLL(const wxULongLong *buffer, size_t size);
128    void WriteLL(const wxLongLong *buffer, size_t size);
129#endif
130    void Write32(const wxUint32 *buffer, size_t size);
131    void Write16(const wxUint16 *buffer, size_t size);
132    void Write8(const wxUint8 *buffer, size_t size);
133    void WriteDouble(const double *buffer, size_t size);
134
135    wxDataOutputStream& operator<<(const wxChar *string);
136    wxDataOutputStream& operator<<(const wxString& string);
137    wxDataOutputStream& operator<<(wxInt8 c);
138    wxDataOutputStream& operator<<(wxInt16 i);
139    wxDataOutputStream& operator<<(wxInt32 i);
140    wxDataOutputStream& operator<<(wxUint8 c);
141    wxDataOutputStream& operator<<(wxUint16 i);
142    wxDataOutputStream& operator<<(wxUint32 i);
143#if wxHAS_INT64
144    wxDataOutputStream& operator<<(wxUint64 i);
145    wxDataOutputStream& operator<<(wxInt64 i);
146#endif
147#if defined(wxLongLong_t) && wxUSE_LONGLONG
148    wxDataOutputStream& operator<<(const wxULongLong &i);
149    wxDataOutputStream& operator<<(const wxLongLong &i);
150#endif
151    wxDataOutputStream& operator<<(double f);
152    wxDataOutputStream& operator<<(float f);
153
154    void BigEndianOrdered(bool be_order) { m_be_order = be_order; }
155
156protected:
157    wxOutputStream *m_output;
158    bool m_be_order;
159#if wxUSE_UNICODE
160    wxMBConv *m_conv;
161#endif
162
163    DECLARE_NO_COPY_CLASS(wxDataOutputStream)
164};
165
166#endif
167  // wxUSE_STREAMS
168
169#endif
170    // _WX_DATSTREAM_H_
171