18#ifndef INCLUDED_BINARYSERIALIZER 
   19#define INCLUDED_BINARYSERIALIZER 
   51        if (ch == traits_type::eof())
 
   52            return traits_type::not_eof(ch);
 
   63        std::ptrdiff_t n = pptr() - pbase();
 
   72    std::streamsize 
xsputn(
const char* s, std::streamsize n)
 
   89    void ScriptString(
const char* name, JS::HandleString 
string);
 
   92    static void Trace(JSTracer* trc, 
void* data);
 
   97    using ObjectTagMap = JS::GCHashMap<JS::Heap<JSObject*>, 
u32, js::MovableCellHasher<JSObject*>, js::SystemAllocPolicy>;
 
  119    template <
typename A>
 
  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)
 
  199        m_Impl.Put(name, (
u8*)value.data(), value.length());
 
  207    virtual void PutRaw(
const char* name, 
const u8* data, 
size_t len)
 
  209        m_Impl.Put(name, data, len);
 
#define to_le16(x)
Definition: byte_order.h:77
#define to_le32(x)
Definition: byte_order.h:78
PutScriptVal implementation details.
Definition: BinarySerializer.h:84
void ScriptString(const char *name, JS::HandleString string)
Definition: BinarySerializer.cpp:433
~CBinarySerializerScriptImpl()
Definition: BinarySerializer.cpp:67
void HandleScriptVal(JS::HandleValue val)
Definition: BinarySerializer.cpp:73
const ScriptInterface & m_ScriptInterface
Definition: BinarySerializer.h:94
u32 GetScriptBackrefTag(JS::HandleObject obj)
Definition: BinarySerializer.cpp:471
ObjectTagMap m_ScriptBackrefTags
Definition: BinarySerializer.h:98
static void Trace(JSTracer *trc, void *data)
Definition: BinarySerializer.cpp:465
JS::GCHashMap< JS::Heap< JSObject * >, u32, js::MovableCellHasher< JSObject * >, js::SystemAllocPolicy > ObjectTagMap
Definition: BinarySerializer.h:97
u32 m_ScriptBackrefsNext
Definition: BinarySerializer.h:99
ISerializer & m_Serializer
Definition: BinarySerializer.h:95
CBinarySerializerScriptImpl(const ScriptInterface &scriptInterface, ISerializer &serializer)
Definition: BinarySerializer.cpp:60
Serialize to a binary stream.
Definition: BinarySerializer.h:109
std::unique_ptr< CBinarySerializerScriptImpl > m_ScriptImpl
Definition: BinarySerializer.h:221
virtual void PutScriptVal(const char *name, JS::MutableHandleValue value)
Definition: BinarySerializer.h:202
T m_Impl
Definition: BinarySerializer.h:218
virtual void PutNumber(const char *name, float value)
Definition: BinarySerializer.h:174
virtual void PutNumber(const char *name, int8_t value)
Definition: BinarySerializer.h:145
std::ostream m_RawStream
Definition: BinarySerializer.h:224
virtual void PutNumber(const char *name, int16_t value)
Definition: BinarySerializer.h:156
NONCOPYABLE(CBinarySerializer)
CSerializerStreamBuf< T > m_RawStreamBuf
Definition: BinarySerializer.h:223
virtual void PutNumber(const char *name, fixed value)
Definition: BinarySerializer.h:184
virtual void PutNumber(const char *name, uint16_t value)
Definition: BinarySerializer.h:150
virtual void PutRaw(const char *name, const u8 *data, size_t len)
Definition: BinarySerializer.h:207
virtual void PutNumber(const char *name, uint8_t value)
Definition: BinarySerializer.h:140
virtual void PutNumber(const char *name, uint32_t value)
Definition: BinarySerializer.h:162
virtual void PutString(const char *name, const std::string &value)
Definition: BinarySerializer.h:195
virtual std::ostream & GetStream()
Returns a stream which can be used to serialize data directly.
Definition: BinarySerializer.h:212
CBinarySerializer(const ScriptInterface &scriptInterface, A &a)
Definition: BinarySerializer.h:120
virtual void PutNumber(const char *name, double value)
Definition: BinarySerializer.h:179
virtual void PutBool(const char *name, bool value)
Definition: BinarySerializer.h:190
CBinarySerializer(const ScriptInterface &scriptInterface)
Definition: BinarySerializer.h:112
virtual void PutNumber(const char *name, int32_t value)
Definition: BinarySerializer.h:168
A simple fixed-point number class.
Definition: Fixed.h:120
T GetInternalValue() const
Definition: Fixed.h:135
Wrapper for redirecting ostream writes to CBinarySerializer's impl.
Definition: BinarySerializer.h:35
NONCOPYABLE(CSerializerStreamBuf)
int sync()
Definition: BinarySerializer.h:61
char m_Buffer[2048]
Definition: BinarySerializer.h:38
int overflow(int ch)
Definition: BinarySerializer.h:49
CSerializerStreamBuf(T &impl)
Definition: BinarySerializer.h:40
std::streamsize xsputn(const char *s, std::streamsize n)
Definition: BinarySerializer.h:72
T & m_SerializerImpl
Definition: BinarySerializer.h:37
Serialization interface; see serialization overview.
Definition: ISerializer.h:121
void NumberU8(const char *name, uint8_t value, uint8_t lower, uint8_t upper)
Serialize a number, which must be lower <= value <= upper.
Definition: ISerializer.cpp:28
Abstraction around a SpiderMonkey JS::Realm.
Definition: ScriptInterface.h:72
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning.
Definition: code_annotation.h:40
#define ARRAY_SIZE(name)
Definition: code_annotation.h:350
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:277
#define T(string_literal)
Definition: secure_crt.cpp:77
int32_t i32
Definition: types.h:34
uint8_t u8
Definition: types.h:37
uint16_t u16
Definition: types.h:38
int16_t i16
Definition: types.h:33
uint32_t u32
Definition: types.h:39
unsigned short uint16_t
Definition: wposix_types.h:52
unsigned int uint32_t
Definition: wposix_types.h:53
short int16_t
Definition: wposix_types.h:38
unsigned char uint8_t
Definition: wposix_types.h:51
signed char int8_t
Definition: wposix_types.h:37