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); }
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); }
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 }); }