mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Use Json::StaticString for field names
Clean up some code relating to unknown fields and avoid allocate/copy/free cycles for Json objects containing serialized field names.
This commit is contained in:
@@ -277,7 +277,7 @@ SField::SField (SerializedTypeID tid, int fv, const char* fn,
|
||||
, fieldMeta (meta)
|
||||
, fieldNum (++num)
|
||||
, signingField (signing)
|
||||
, jsonName (getName ())
|
||||
, jsonName (fieldName.c_str())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -288,7 +288,7 @@ SField::SField (int fc)
|
||||
, fieldMeta (sMD_Never)
|
||||
, fieldNum (++num)
|
||||
, signingField (IsSigning::yes)
|
||||
, jsonName (getName ())
|
||||
, jsonName (fieldName.c_str())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -296,18 +296,31 @@ SField::SField (int fc)
|
||||
// This is naturally done with no extra expense
|
||||
// from getField(int code).
|
||||
SField::SField (SerializedTypeID tid, int fv)
|
||||
: fieldCode (field_code (tid, fv))
|
||||
, fieldType (tid)
|
||||
, fieldValue (fv)
|
||||
, fieldMeta (sMD_Default)
|
||||
, fieldNum (++num)
|
||||
, signingField (IsSigning::yes)
|
||||
: fieldCode (field_code (tid, fv))
|
||||
, fieldType (tid)
|
||||
, fieldValue (fv)
|
||||
, fieldName (std::to_string (tid) + '/' + std::to_string (fv))
|
||||
, fieldMeta (sMD_Default)
|
||||
, fieldNum (++num)
|
||||
, signingField (IsSigning::yes)
|
||||
, jsonName (fieldName.c_str())
|
||||
{
|
||||
fieldName = std::to_string (tid) + '/' + std::to_string (fv);
|
||||
jsonName = getName ();
|
||||
assert ((fv != 1) || ((tid != STI_ARRAY) && (tid != STI_OBJECT)));
|
||||
}
|
||||
|
||||
// we can't use the default move constructor because
|
||||
// it could leave jsonName referencing a destroyed string
|
||||
SField::SField (SField &&s)
|
||||
: fieldCode (s.fieldCode)
|
||||
, fieldType (s.fieldType)
|
||||
, fieldValue (s.fieldValue)
|
||||
, fieldMeta (s.fieldMeta)
|
||||
, fieldNum (s.fieldNum)
|
||||
, signingField (s.signingField)
|
||||
, jsonName (fieldName.c_str())
|
||||
{
|
||||
}
|
||||
|
||||
SField const&
|
||||
SField::getField (int code)
|
||||
{
|
||||
@@ -380,18 +393,6 @@ int SField::compare (SField const& f1, SField const& f2)
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string SField::getName () const
|
||||
{
|
||||
if (!fieldName.empty ())
|
||||
return fieldName;
|
||||
|
||||
if (fieldValue == 0)
|
||||
return "";
|
||||
|
||||
return std::to_string(safe_cast<int> (fieldType)) + "/" +
|
||||
std::to_string(fieldValue);
|
||||
}
|
||||
|
||||
SField const&
|
||||
SField::getField (std::string const& fieldName)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user