示例#1
0
        internal TinyJsonObject CreateObjectFromJsonHandle(JsonKeyHandle jsonKeyHandle)
        {
            TinyJsonObject value = new TinyJsonObject {
                m_Data = this, Type = JsonKeyType(jsonKeyHandle)
            };

            switch (JsonKeyType(jsonKeyHandle))
            {
            case JsonValueType.Bool:
                value.m_BoolVal = m_BoolBuffer[LocationInValueBuffer(jsonKeyHandle)];
                break;

            case JsonValueType.Int:
                value.m_IntVal = m_IntBuffer[LocationInValueBuffer(jsonKeyHandle)];
                break;

            case JsonValueType.Float:
                value.m_FloatVal = m_FloatBuffer[LocationInValueBuffer(jsonKeyHandle)];
                break;

            case JsonValueType.String:
                value.m_StringRefHandle = jsonKeyHandle;
                break;

            case JsonValueType.Array:
                value.m_ArrayRefHandle = jsonKeyHandle;
                break;

            case JsonValueType.Object:
                value.m_Data.m_RootObjMap = m_ObjectBuffer[LocationInValueBuffer(jsonKeyHandle)];
                break;
            }

            return(value);
        }
示例#2
0
        internal void AddOrUpdateString(FixedString128 key, TinyJsonObject value)
        {
            JsonKeyHandle jsonRefHandle;

            if (m_RootObjMap.ContainsKey(key))
            {
                jsonRefHandle = m_RootObjMap[key];
                if (JsonKeyType(jsonRefHandle) == JsonValueType.String)
                {
                    UpdateStringBufferFromObjectBasedOnVariant(value, jsonRefHandle);

                    return;
                }

                // remove the old type completely and add a new one as normal
                RemoveValueFromBuffer(jsonRefHandle);
            }

            jsonRefHandle = new JsonKeyHandle(ref this, JsonValueType.String, m_StringBuffer.Length);
            if (!value.m_StringVal.IsEmpty)
            {
                m_StringBuffer.Add(value.m_StringVal[0]);
                value.m_StringVal.Dispose();
            }
            else
            {
                m_StringBuffer.Add(value.m_Data.m_StringBuffer[value.m_Data.LocationInValueBuffer(value.m_StringRefHandle)]);
            }

            value.m_StringVal.Dispose();
            m_RootObjMap[key] = jsonRefHandle;
        }
示例#3
0
        /**
         * Adds the object to the correct buffer associated with the provided key.
         */
        internal void AddOrUpdateField(FixedString128 key, TinyJsonObject value)
        {
            switch (value.Type)
            {
            case JsonValueType.Bool:
                AddOrUpdateBool(key, value);
                break;

            case JsonValueType.Int:
                AddOrUpdateInt(key, value);
                break;

            case JsonValueType.Float:
                AddOrUpdateFloat(key, value);
                break;

            case JsonValueType.String:
                AddOrUpdateString(key, value);
                break;

            case JsonValueType.Array:
                var tinyJsonArray = value.AsArray();
                AddOrUpdateArray(key, ref tinyJsonArray);
                break;

            case JsonValueType.Object:
                AddOrUpdateObject(key, ref value.m_Data);
                break;

            default:
                InvalidJsonTypeException();
                return;
            }
        }
示例#4
0
 public TinyJsonInterface(Allocator allocator)
 {
     m_RootData = new TinyJsonData(allocator);
     Object     = new TinyJsonObject {
         Type = JsonValueType.Object, m_Data = m_RootData
     };
 }
示例#5
0
        internal void DeepCopyFields(ref TinyJsonData source)
        {
            TinyJsonObject.CheckNotSameObject(source, this);

            foreach (var keyValue in source.m_RootObjMap)
            {
                var objectCopy = source.CreateObjectFromJsonHandle(keyValue.Value); // read from source
                AddOrUpdateField(keyValue.Key, objectCopy);                         // write to destination
            }
        }
示例#6
0
 // A tiny json object of type string can either:
 // have its data uninitialized, but stringVal initialized with the string
 // or have its data initialized, and its stringVal is empty but its stringValueRef is initialized to its
 // location within the data buffer of the object
 void UpdateStringBufferFromObjectBasedOnVariant(TinyJsonObject value, JsonKeyHandle jsonRefHandle)
 {
     if (!value.m_StringVal.IsEmpty)
     {
         m_StringBuffer[LocationInValueBuffer(jsonRefHandle)] = value.m_StringVal[0];
         value.m_StringVal.Dispose();
     }
     else
     {
         m_StringBuffer[LocationInValueBuffer(jsonRefHandle)] = value.m_Data.m_StringBuffer[value.m_Data.LocationInValueBuffer(value.m_StringRefHandle)];
     }
 }
示例#7
0
        internal JsonKeyHandle CreateNestedObject(out TinyJsonObject value)
        {
            var handle = new JsonKeyHandle(ref this, JsonValueType.Object, m_ObjectBuffer.Length);
            var objMap = new UnsafeHashMap <FixedString128, JsonKeyHandle>(10, m_Allocator);

            m_ObjectBuffer.Add(objMap);
            value = new TinyJsonObject
            {
                m_Data = this, Type = JsonValueType.Object
            };
            value.m_Data.m_RootObjMap = objMap;
            return(handle);
        }
示例#8
0
        internal void AddOrUpdateInt(FixedString128 key, TinyJsonObject value)
        {
            JsonKeyHandle jsonRefHandle;

            if (m_RootObjMap.ContainsKey(key))
            {
                jsonRefHandle = m_RootObjMap[key];
                if (JsonKeyType(jsonRefHandle) == JsonValueType.Int)
                {
                    // simple value swap if its the same type
                    m_IntBuffer[LocationInValueBuffer(jsonRefHandle)] = value.AsInt();
                    return;
                }

                // remove the old type completely and add a new one as normal
                RemoveValueFromBuffer(jsonRefHandle);
            }

            jsonRefHandle = new JsonKeyHandle(ref this, JsonValueType.Int, m_IntBuffer.Length);
            m_IntBuffer.Add(value.AsInt());
            m_RootObjMap[key] = jsonRefHandle;
        }