Avoid unnecessary string copies in the JSON encoder

refs #12509
This commit is contained in:
Gunnar Beutner 2016-08-27 11:47:36 +02:00
parent 170c3624e3
commit 00eec13338
2 changed files with 4 additions and 7 deletions

View File

@ -66,8 +66,6 @@ static void EncodeArray(yajl_gen handle, const Array::Ptr& arr)
static void Encode(yajl_gen handle, const Value& value) static void Encode(yajl_gen handle, const Value& value)
{ {
String str;
switch (value.GetType()) { switch (value.GetType()) {
case ValueNumber: case ValueNumber:
if (yajl_gen_double(handle, static_cast<double>(value)) == yajl_gen_invalid_number) if (yajl_gen_double(handle, static_cast<double>(value)) == yajl_gen_invalid_number)
@ -79,8 +77,7 @@ static void Encode(yajl_gen handle, const Value& value)
break; break;
case ValueString: case ValueString:
str = value; yajl_gen_string(handle, reinterpret_cast<const unsigned char *>(value.Get<String>().CStr()), value.Get<String>().GetLength());
yajl_gen_string(handle, reinterpret_cast<const unsigned char *>(str.CStr()), str.GetLength());
break; break;
case ValueObject: case ValueObject:

View File

@ -256,14 +256,14 @@ public:
Value Clone(void) const; Value Clone(void) const;
private:
boost::variant<boost::blank, double, bool, String, Object::Ptr> m_Value;
template<typename T> template<typename T>
const T& Get(void) const const T& Get(void) const
{ {
return boost::get<T>(m_Value); return boost::get<T>(m_Value);
} }
private:
boost::variant<boost::blank, double, bool, String, Object::Ptr> m_Value;
}; };
extern I2_BASE_API Value Empty; extern I2_BASE_API Value Empty;