Pyrogenesis  trunk
StdDeserializer.h
Go to the documentation of this file.
1 /* Copyright (C) 2016 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, JS::MutableHandleValue out);
35  virtual void ScriptObjectAppend(const char* name, JS::HandleValue objVal);
36  virtual void ScriptString(const char* name, JS::MutableHandleString out);
37 
38  virtual std::istream& GetStream();
39  virtual void RequireBytesInStream(size_t numBytes);
40 
41  virtual void SetSerializablePrototypes(std::map<std::wstring, JS::Heap<JSObject*> >& prototypes);
42 
43  static void Trace(JSTracer *trc, void *data);
44 
45  void TraceMember(JSTracer *trc);
46 
47 protected:
48  virtual void Get(const char* name, u8* data, size_t len);
49 
50 private:
51  jsval ReadScriptVal(const char* name, JS::HandleObject appendParent);
52  void ReadStringLatin1(const char* name, std::vector<JS::Latin1Char>& str);
53  void ReadStringUTF16(const char* name, utf16string& str);
54 
55  virtual void AddScriptBackref(JS::HandleObject obj);
56  virtual void GetScriptBackref(u32 tag, JS::MutableHandleObject ret);
57  std::vector<JS::Heap<JSObject*> > m_ScriptBackrefs;
58  JS::PersistentRooted<JSObject*> m_dummyObject;
59 
61 
62  std::istream& m_Stream;
63 
64  std::map<std::wstring, JS::Heap<JSObject*> > m_SerializablePrototypes;
65 
66  bool IsSerializablePrototype(const std::wstring& name);
67  void GetSerializablePrototype(const std::wstring& name, JS::MutableHandleObject ret);
68 };
69 
70 #endif // INCLUDED_STDDESERIALIZER
virtual void ScriptString(const char *name, JS::MutableHandleString out)
Deserialize a JSString.
Definition: StdDeserializer.cpp:462
CStdDeserializer(ScriptInterface &scriptInterface, std::istream &stream)
Definition: StdDeserializer.cpp:30
void TraceMember(JSTracer *trc)
Definition: StdDeserializer.cpp:55
std::map< std::wstring, JS::Heap< JSObject * > > m_SerializablePrototypes
Definition: StdDeserializer.h:64
ScriptInterface & m_ScriptInterface
Definition: StdDeserializer.h:60
virtual void AddScriptBackref(JS::HandleObject obj)
Definition: StdDeserializer.cpp:112
void ReadStringLatin1(const char *name, std::vector< JS::Latin1Char > &str)
Definition: StdDeserializer.cpp:444
static void out(const wchar_t *fmt,...)
Definition: wdbg_sym.cpp:419
virtual void ScriptVal(const char *name, JS::MutableHandleValue out)
Deserialize a jsval, replacing &#39;out&#39;.
Definition: StdDeserializer.cpp:493
jsval ReadScriptVal(const char *name, JS::HandleObject appendParent)
Definition: StdDeserializer.cpp:125
virtual std::istream & GetStream()
Returns a stream which can be used to deserialize data directly.
Definition: StdDeserializer.cpp:93
uint8_t u8
Definition: types.h:37
virtual void RequireBytesInStream(size_t numBytes)
Throws an exception if the stream definitely cannot provide the required number of bytes...
Definition: StdDeserializer.cpp:98
virtual void Get(const char *name, u8 *data, size_t len)
Definition: StdDeserializer.cpp:64
uint32_t u32
Definition: types.h:39
bool IsSerializablePrototype(const std::wstring &name)
Definition: StdDeserializer.cpp:515
virtual void GetScriptBackref(u32 tag, JS::MutableHandleObject ret)
Definition: StdDeserializer.cpp:117
JS::PersistentRooted< JSObject * > m_dummyObject
Definition: StdDeserializer.h:58
virtual void ScriptObjectAppend(const char *name, JS::HandleValue objVal)
Deserialize an object value, appending properties to object &#39;objVal&#39;.
Definition: StdDeserializer.cpp:498
std::basic_string< utf16_t, utf16_traits > utf16string
Definition: utf16string.h:109
std::istream & m_Stream
Definition: StdDeserializer.h:62
std::vector< JS::Heap< JSObject * > > m_ScriptBackrefs
Definition: StdDeserializer.h:57
void ReadStringUTF16(const char *name, utf16string &str)
Definition: StdDeserializer.cpp:453
NONCOPYABLE(CStdDeserializer)
Abstraction around a SpiderMonkey JSContext.
Definition: ScriptInterface.h:71
void GetSerializablePrototype(const std::wstring &name, JS::MutableHandleObject ret)
Definition: StdDeserializer.cpp:520
static void Trace(JSTracer *trc, void *data)
Definition: StdDeserializer.cpp:50
virtual ~CStdDeserializer()
Definition: StdDeserializer.cpp:45
Definition: StdDeserializer.h:27
virtual void SetSerializablePrototypes(std::map< std::wstring, JS::Heap< JSObject * > > &prototypes)
Definition: StdDeserializer.cpp:510
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34