18 #ifndef INCLUDED_BINARYSERIALIZER 19 #define INCLUDED_BINARYSERIALIZER 41 m_SerializerImpl(impl)
43 setp(m_Buffer, m_Buffer +
ARRAY_SIZE(m_Buffer) - 1);
51 if (ch == traits_type::eof())
52 return traits_type::not_eof(ch);
63 std::ptrdiff_t n = pptr() - pbase();
67 m_SerializerImpl.Put(
"stream", reinterpret_cast<const u8*> (pbase()), n);
72 std::streamsize
xsputn(
const char* s, std::streamsize n)
74 m_SerializerImpl.Put(
"stream", reinterpret_cast<const u8*> (s), n);
89 void ScriptString(
const char* name, JS::HandleString
string);
90 void HandleScriptVal(JS::HandleValue val);
92 static void Trace(JSTracer* trc,
void* data);
97 using ObjectTagMap = JS::GCHashMap<JS::Heap<JSObject*>,
u32, js::MovableCellHasher<JSObject*>, js::SystemAllocPolicy>;
100 u32 GetScriptBackrefTag(JS::HandleObject obj);
107 template <
typename T>
114 m_RawStreamBuf(m_Impl),
115 m_RawStream(&m_RawStreamBuf)
119 template <
typename A>
123 m_RawStreamBuf(m_Impl),
124 m_RawStream(&m_RawStreamBuf)
142 m_Impl.Put(name, (
const u8*)&value,
sizeof(
uint8_t));
147 m_Impl.Put(name, (
const u8*)&value,
sizeof(
int8_t));
153 m_Impl.Put(name, (
const u8*)&v,
sizeof(
uint16_t));
159 m_Impl.Put(name, (
const u8*)&v,
sizeof(
int16_t));
165 m_Impl.Put(name, (
const u8*)&v,
sizeof(
uint32_t));
171 m_Impl.Put(name, (
const u8*)&v,
sizeof(int32_t));
176 m_Impl.Put(name, (
const u8*)&value,
sizeof(
float));
181 m_Impl.Put(name, (
const u8*)&value,
sizeof(
double));
187 m_Impl.Put(name, (
const u8*)&v,
sizeof(int32_t));
190 virtual void PutBool(
const char* name,
bool value)
192 NumberU8(name, value ? 1 : 0, 0, 1);
195 virtual void PutString(
const char* name,
const std::string& value)
198 PutNumber(
"string length", (
uint32_t)value.length());
199 m_Impl.Put(name, (
u8*)value.data(), value.length());
204 m_ScriptImpl->HandleScriptVal(value);
207 virtual void PutRaw(
const char* name,
const u8* data,
size_t len)
209 m_Impl.Put(name, data, len);
227 #endif // INCLUDED_BINARYSERIALIZER signed char int8_t
Definition: wposix_types.h:37
A simple fixed-point number class.
Definition: Fixed.h:119
int overflow(int ch)
Definition: BinarySerializer.h:49
CBinarySerializer(const ScriptInterface &scriptInterface, A &a)
Definition: BinarySerializer.h:120
char m_Buffer[2048]
Definition: BinarySerializer.h:38
CSerializerStreamBuf< T > m_RawStreamBuf
Definition: BinarySerializer.h:223
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
Definition: code_annotation.h:38
uint16_t u16
Definition: types.h:38
Serialization interface; see serialization overview.
Definition: ISerializer.h:120
#define to_le16(x)
Definition: byte_order.h:77
short int16_t
Definition: wposix_types.h:38
virtual void PutNumber(const char *name, int32_t value)
Definition: BinarySerializer.h:168
virtual void PutNumber(const char *name, fixed value)
Definition: BinarySerializer.h:184
virtual void PutNumber(const char *name, float value)
Definition: BinarySerializer.h:174
T GetInternalValue() const
Definition: Fixed.h:135
ISerializer & m_Serializer
Definition: BinarySerializer.h:95
std::ostream m_RawStream
Definition: BinarySerializer.h:224
virtual void PutRaw(const char *name, const u8 *data, size_t len)
Definition: BinarySerializer.h:207
virtual void PutBool(const char *name, bool value)
Definition: BinarySerializer.h:190
uint8_t u8
Definition: types.h:37
#define ARRAY_SIZE(name)
Definition: code_annotation.h:348
PutScriptVal implementation details.
Definition: BinarySerializer.h:83
virtual void PutNumber(const char *name, uint32_t value)
Definition: BinarySerializer.h:162
u32 m_ScriptBackrefsNext
Definition: BinarySerializer.h:99
JS::GCHashMap< JS::Heap< JSObject * >, u32, js::MovableCellHasher< JSObject * >, js::SystemAllocPolicy > ObjectTagMap
Definition: BinarySerializer.h:97
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:290
uint32_t u32
Definition: types.h:39
std::streamsize xsputn(const char *s, std::streamsize n)
Definition: BinarySerializer.h:72
T & m_SerializerImpl
Definition: BinarySerializer.h:37
virtual void PutString(const char *name, const std::string &value)
Definition: BinarySerializer.h:195
#define to_le32(x)
Definition: byte_order.h:78
unsigned char uint8_t
Definition: wposix_types.h:51
Definition: trace.cpp:144
int sync()
Definition: BinarySerializer.h:61
virtual void PutNumber(const char *name, int8_t value)
Definition: BinarySerializer.h:145
#define T(string_literal)
Definition: secure_crt.cpp:77
ObjectTagMap m_ScriptBackrefTags
Definition: BinarySerializer.h:98
int32_t i32
Definition: types.h:34
NONCOPYABLE(CSerializerStreamBuf)
virtual void PutNumber(const char *name, int16_t value)
Definition: BinarySerializer.h:156
virtual std::ostream & GetStream()
Returns a stream which can be used to serialize data directly.
Definition: BinarySerializer.h:212
const ScriptInterface & m_ScriptInterface
Definition: BinarySerializer.h:94
unsigned int uint32_t
Definition: wposix_types.h:53
T m_Impl
Definition: BinarySerializer.h:218
virtual void PutNumber(const char *name, uint16_t value)
Definition: BinarySerializer.h:150
Abstraction around a SpiderMonkey JS::Realm.
Definition: ScriptInterface.h:71
int16_t i16
Definition: types.h:33
Serialize to a binary stream.
Definition: BinarySerializer.h:108
CBinarySerializer(const ScriptInterface &scriptInterface)
Definition: BinarySerializer.h:112
unsigned short uint16_t
Definition: wposix_types.h:52
Wrapper for redirecting ostream writes to CBinarySerializer's impl.
Definition: BinarySerializer.h:34
virtual void PutNumber(const char *name, double value)
Definition: BinarySerializer.h:179
virtual void PutScriptVal(const char *name, JS::MutableHandleValue value)
Definition: BinarySerializer.h:202
std::unique_ptr< CBinarySerializerScriptImpl > m_ScriptImpl
Definition: BinarySerializer.h:221
virtual void PutNumber(const char *name, uint8_t value)
Definition: BinarySerializer.h:140
CSerializerStreamBuf(T &impl)
Definition: BinarySerializer.h:40