Pyrogenesis  13997
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
IDeserializer.h
Go to the documentation of this file.
1 /* Copyright (C) 2011 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef INCLUDED_IDESERIALIZER
19 #define INCLUDED_IDESERIALIZER
20 
21 #include "maths/Fixed.h"
22 #include "ps/Errors.h"
24 
25 ERROR_GROUP(Deserialize);
26 ERROR_TYPE(Deserialize, OutOfBounds);
27 ERROR_TYPE(Deserialize, InvalidCharInString);
28 ERROR_TYPE(Deserialize, ReadFailed);
29 ERROR_TYPE(Deserialize, ScriptError);
30 
31 /**
32  * Deserialization interface; see \ref serialization "serialization overview".
33  */
35 {
36 public:
37  virtual ~IDeserializer();
38 
39  virtual void NumberU8(const char* name, uint8_t& out, uint8_t lower, uint8_t upper);
40  virtual void NumberI8(const char* name, int8_t& out, int8_t lower, int8_t upper);
41  virtual void NumberU16(const char* name, uint16_t& out, uint16_t lower, uint16_t upper);
42  virtual void NumberI16(const char* name, int16_t& out, int16_t lower, int16_t upper);
43  virtual void NumberU32(const char* name, uint32_t& out, uint32_t lower, uint32_t upper);
44  virtual void NumberI32(const char* name, int32_t& out, int32_t lower, int32_t upper);
45  virtual void NumberU8_Unbounded(const char* name, uint8_t& out);
46  virtual void NumberI8_Unbounded(const char* name, int8_t& out);
47  virtual void NumberU16_Unbounded(const char* name, uint16_t& out);
48  virtual void NumberI16_Unbounded(const char* name, int16_t& out);
49  virtual void NumberU32_Unbounded(const char* name, uint32_t& out);
50  virtual void NumberI32_Unbounded(const char* name, int32_t& out);
51  virtual void NumberFloat_Unbounded(const char* name, float& out);
52  virtual void NumberDouble_Unbounded(const char* name, double& out);
53  virtual void NumberFixed_Unbounded(const char* name, fixed& out);
54  virtual void Bool(const char* name, bool& out);
55  virtual void StringASCII(const char* name, std::string& out, uint32_t minlength, uint32_t maxlength);
56  virtual void String(const char* name, std::wstring& out, uint32_t minlength, uint32_t maxlength);
57 
58  /// Deserialize a jsval, replacing 'out'
59  virtual void ScriptVal(const char* name, jsval& out) = 0;
60  virtual void ScriptVal(const char* name, CScriptVal& out) = 0;
61  virtual void ScriptVal(const char* name, CScriptValRooted& out) = 0;
62 
63  /// Deserialize an object jsval, appending properties to object 'obj'
64  virtual void ScriptObjectAppend(const char* name, jsval& obj) = 0;
65 
66  /// Deserialize a JSString
67  virtual void ScriptString(const char* name, JSString*& out) = 0;
68 
69  virtual void RawBytes(const char* name, u8* data, size_t len);
70 
71  // Features for simulation-state serialisation:
72  virtual int GetVersion() const;
73 
74  /**
75  * Returns a stream which can be used to deserialize data directly.
76  * (This is particularly useful for chaining multiple deserializers
77  * together.)
78  */
79  virtual std::istream& GetStream() = 0;
80 
81  /**
82  * Throws an exception if the stream definitely cannot provide the required
83  * number of bytes.
84  * (It might be conservative and *not* throw an exception in some cases where
85  * the stream actually can't provide the required bytes.)
86  * (This should be used when allocating memory based on data in the
87  * stream, e.g. reading strings, to avoid dangerously large allocations
88  * when the data is invalid.)
89  */
90  virtual void RequireBytesInStream(size_t numBytes) = 0;
91 
92 protected:
93  virtual void Get(const char* name, u8* data, size_t len) = 0;
94 };
95 
96 #endif // INCLUDED_IDESERIALIZER
signed char int8_t
Definition: wposix_types.h:37
virtual void StringASCII(const char *name, std::string &out, uint32_t minlength, uint32_t maxlength)
#define u8
Definition: types.h:39
A simple fixed-point number class.
Definition: Fixed.h:115
virtual void Bool(const char *name, bool &out)
virtual void ScriptObjectAppend(const char *name, jsval &obj)=0
Deserialize an object jsval, appending properties to object &#39;obj&#39;.
virtual void NumberDouble_Unbounded(const char *name, double &out)
short int16_t
Definition: wposix_types.h:38
static void out(const wchar_t *fmt,...)
Definition: wdbg_sym.cpp:419
virtual void RequireBytesInStream(size_t numBytes)=0
Throws an exception if the stream definitely cannot provide the required number of bytes...
virtual void NumberU32_Unbounded(const char *name, uint32_t &out)
A trivial wrapper around a jsval.
Definition: ScriptVal.h:29
virtual void NumberFixed_Unbounded(const char *name, fixed &out)
virtual void NumberI16(const char *name, int16_t &out, int16_t lower, int16_t upper)
virtual void NumberU8_Unbounded(const char *name, uint8_t &out)
virtual int GetVersion() const
#define ERROR_TYPE(a, b)
Definition: Errors.h:96
#define ERROR_GROUP(a)
Definition: Errors.h:87
virtual void RawBytes(const char *name, u8 *data, size_t len)
virtual void NumberI8(const char *name, int8_t &out, int8_t lower, int8_t upper)
unsigned char uint8_t
Definition: wposix_types.h:51
virtual void ScriptString(const char *name, JSString *&out)=0
Deserialize a JSString.
virtual std::istream & GetStream()=0
Returns a stream which can be used to deserialize data directly.
virtual ~IDeserializer()
virtual void Get(const char *name, u8 *data, size_t len)=0
virtual void NumberU8(const char *name, uint8_t &out, uint8_t lower, uint8_t upper)
virtual void ScriptVal(const char *name, jsval &out)=0
Deserialize a jsval, replacing &#39;out&#39;.
virtual void NumberFloat_Unbounded(const char *name, float &out)
virtual void String(const char *name, std::wstring &out, uint32_t minlength, uint32_t maxlength)
unsigned int uint32_t
Definition: wposix_types.h:53
virtual void NumberU16(const char *name, uint16_t &out, uint16_t lower, uint16_t upper)
virtual void NumberU32(const char *name, uint32_t &out, uint32_t lower, uint32_t upper)
unsigned short uint16_t
Definition: wposix_types.h:52
virtual void NumberI8_Unbounded(const char *name, int8_t &out)
virtual void NumberI16_Unbounded(const char *name, int16_t &out)
virtual void NumberU16_Unbounded(const char *name, uint16_t &out)
virtual void NumberI32(const char *name, int32_t &out, int32_t lower, int32_t upper)
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34
virtual void NumberI32_Unbounded(const char *name, int32_t &out)