Example #1
0
        protected FieldData[] ProcessJSONFields(uint instanceChecksum, bool overrideThinger = false)    // what no
        {
            if (!InstanceJSON.ContainsKey(instanceChecksum))
            {
                return(null);
            }
            FieldData[] output = new FieldData[InstanceJSON[instanceChecksum].GetFields().Length];

            uint fieldIndex = 0;

            foreach (STUInstanceJSON.STUFieldJSON field in InstanceJSON[instanceChecksum].GetFields())
            {
                output[fieldIndex] = new FieldData(field);
                if (output[fieldIndex].TypeInstanceChecksum != 0)
                {
                    if (!InternalInstances.ContainsKey(output[fieldIndex].TypeInstanceChecksum))
                    {
                        InternalInstances[output[fieldIndex].TypeInstanceChecksum] = null; // prevent stackoverflow
                        InternalInstances[output[fieldIndex].TypeInstanceChecksum] =
                            GetInstanceData(output[fieldIndex].TypeInstanceChecksum, null);
                    }
                }
                fieldIndex++;
            }
            return(output);
        }
Example #2
0
        public CodeFrame Clone()
        {
            var copy = new CodeFrame();

            copy.Layouts     = Layouts.Clone();
            copy.Strings     = Strings.Clone();
            copy.GlobalScope = GlobalScope.Clone();
            copy.Ops         = Ops.Clone();
            copy.OpData      = OpData.Clone();
            copy._references = new ReferenceMap(_references);
            copy.Symbols     = Symbols != null?Symbols.Clone() : null;

            copy.HandleMap            = HandleMap.Clone();
            copy.InternalTypes        = new Dictionary <String, Int32>(InternalTypes);
            copy._internalClasses     = new ClassMap(_internalClasses);
            copy.InternalInstances    = InternalInstances.Clone();
            copy.LateBounds           = LateBounds.Clone();
            copy.InternalConstructors = InternalConstructors.Clone();
            return(copy);
        }
Example #3
0
        public InstanceData GetInstanceData(uint instanceChecksum)
        {
            if (!InstanceJSON.ContainsKey(instanceChecksum))
            {
                Debugger.Log(0, "STULib",
                             $"[Version1HashComparer]: Instance {instanceChecksum:X} does not exist in the dataset\n");
                return(null);
            }
            STUInstanceJSON json = InstanceJSON[instanceChecksum];

            if (json.Parent != null && !InternalInstances.ContainsKey(json.ParentChecksum))
            {
                InternalInstances[json.ParentChecksum] = GetInstanceData(json.ParentChecksum);
            }

            // get all children
            // WARNING: NOT THREAD SAFE
            if (GetAllChildren)
            {
                foreach (KeyValuePair <uint, STUInstanceJSON> instanceJSON in InstanceJSON)
                {
                    if (instanceJSON.Value.ParentChecksum != json.Hash ||
                        InternalInstances.ContainsKey(instanceJSON.Value.Hash))
                    {
                        continue;
                    }
                    InternalInstances[instanceJSON.Value.Hash] = null;
                    InternalInstances[instanceJSON.Value.Hash] = GetInstanceData(instanceJSON.Value.Hash);
                }
            }

            FieldData[] jsonFields = ProcessJSONFields(instanceChecksum, true);
            return(new InstanceData {
                WrittenFields = null,
                Fields = jsonFields,
                Checksum = instanceChecksum,
                ParentType = json.Parent,
                ParentChecksum = json.ParentChecksum
            });
        }