Pyrogenesis  13997
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
StdDeserializer.h
Go to the documentation of this file.
1 /* Copyright (C) 2013 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_STDDESERIALIZER
19 #define INCLUDED_STDDESERIALIZER
20 
21 #include "IDeserializer.h"
22 
23 #include "ps/utf16string.h"
24 
25 #include <map>
26 
28 {
30 public:
31  CStdDeserializer(ScriptInterface& scriptInterface, std::istream& stream);
32  virtual ~CStdDeserializer();
33 
34  virtual void ScriptVal(const char* name, jsval& out);
35  virtual void ScriptVal(const char* name, CScriptVal& out);
36  virtual void ScriptVal(const char* name, CScriptValRooted& out);
37  virtual void ScriptObjectAppend(const char* name, jsval& obj);
38  virtual void ScriptString(const char* name, JSString*& out);
39 
40  virtual std::istream& GetStream();
41  virtual void RequireBytesInStream(size_t numBytes);
42 
43  virtual void SetSerializablePrototypes(std::map<std::wstring, JSObject*>& prototypes);
44 
45 protected:
46  virtual void Get(const char* name, u8* data, size_t len);
47 
48 private:
49  jsval ReadScriptVal(const char* name, JSObject* appendParent);
50  void ReadStringUTF16(const char* name, utf16string& str);
51 
52  virtual void AddScriptBackref(JSObject* obj);
53  virtual JSObject* GetScriptBackref(u32 tag);
54  virtual u32 ReserveScriptBackref();
55  virtual void SetReservedScriptBackref(u32 tag, JSObject* obj);
56  void FreeScriptBackrefs();
57  std::map<u32, JSObject*> m_ScriptBackrefs; // vector would be nice but maintaining JS roots would be harder
59 
60  std::istream& m_Stream;
61 
62  std::map<std::wstring, JSObject*> m_SerializablePrototypes;
63 
64  bool IsSerializablePrototype(const std::wstring& name);
65  JSObject* GetSerializablePrototype(const std::wstring& name);
66 };
67 
68 #endif // INCLUDED_STDDESERIALIZER
#define u8
Definition: types.h:39
CStdDeserializer(ScriptInterface &scriptInterface, std::istream &stream)
ScriptInterface & m_ScriptInterface
static void out(const wchar_t *fmt,...)
Definition: wdbg_sym.cpp:419
virtual JSObject * GetScriptBackref(u32 tag)
A trivial wrapper around a jsval.
Definition: ScriptVal.h:29
virtual std::istream & GetStream()
Returns a stream which can be used to deserialize data directly.
JSObject * GetSerializablePrototype(const std::wstring &name)
virtual void ScriptVal(const char *name, jsval &out)
Deserialize a jsval, replacing &#39;out&#39;.
virtual u32 ReserveScriptBackref()
virtual void RequireBytesInStream(size_t numBytes)
Throws an exception if the stream definitely cannot provide the required number of bytes...
virtual void Get(const char *name, u8 *data, size_t len)
bool IsSerializablePrototype(const std::wstring &name)
std::map< u32, JSObject * > m_ScriptBackrefs
virtual void SetReservedScriptBackref(u32 tag, JSObject *obj)
std::basic_string< utf16_t, utf16_traits > utf16string
Definition: utf16string.h:109
std::istream & m_Stream
#define u32
Definition: types.h:41
virtual void ScriptObjectAppend(const char *name, jsval &obj)
Deserialize an object jsval, appending properties to object &#39;obj&#39;.
std::map< std::wstring, JSObject * > m_SerializablePrototypes
void ReadStringUTF16(const char *name, utf16string &str)
NONCOPYABLE(CStdDeserializer)
Abstraction around a SpiderMonkey JSContext.
virtual ~CStdDeserializer()
jsval ReadScriptVal(const char *name, JSObject *appendParent)
virtual void SetSerializablePrototypes(std::map< std::wstring, JSObject * > &prototypes)
virtual void ScriptString(const char *name, JSString *&out)
Deserialize a JSString.
virtual void AddScriptBackref(JSObject *obj)
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34