-
Notifications
You must be signed in to change notification settings - Fork 3
/
format.hpp
78 lines (66 loc) · 2.92 KB
/
format.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/***************************************************************************
* Copyright (C) 2010 by Tamino Dauth *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef WC3LIB_FORMAT_HPP
#define WC3LIB_FORMAT_HPP
/**
* \defgroup io I/O
* wc3lib supports I/O operations for most of Warcraft III's file formats.
* Base class of all formats is \ref wc3lib::Format.
*/
#include <istream>
#include <ostream>
#include <boost/cstdint.hpp>
#include "config.h"
#include "utilities.hpp"
#include "platform.hpp"
namespace wc3lib
{
/**
* \brief Abstract class for serializable file formats which supports basic I/O operations "read" and "write".
*
* Provides abstract functions for reading and writing.
*
* \ingroup io
*/
class Format
{
public:
typedef byte CharType;
typedef std::basic_istream<byte> InputStream;
typedef std::basic_ostream<byte> OutputStream;
virtual ~Format();
/**
* Reads the data of a format from input stream \p istream.
*
* \return Usually this function should returns the number of read bytes. For non-binary formats or formats which won't store any byte count this value can be 0. It has been introduced for convenience for example when reading chunks of the MDX format where you do have to know how many bytes are still left.
*
* \throws Exception If an error occurs this should throw an exception.
*/
virtual std::streamsize read(InputStream &istream) = 0;
/**
* Writes the data of a format to output stream \p ostream.
*
* \throws Exception If an error occurs this should throw an exception.
*/
virtual std::streamsize write(OutputStream &ostream) const = 0;
virtual uint32_t version() const;
};
}
#endif