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)
{
String str;
switch (value.GetType()) {
case ValueNumber:
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;
case ValueString:
str = value;
yajl_gen_string(handle, reinterpret_cast<const unsigned char *>(str.CStr()), str.GetLength());
yajl_gen_string(handle, reinterpret_cast<const unsigned char *>(value.Get<String>().CStr()), value.Get<String>().GetLength());
break;
case ValueObject:

View File

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