public bool IsAssignableFrom(EEClass c) { EEClass cur = c; while (!System_Object.IsNullAddress(cur.Parent_Class)) { if (this.Address == cur.Address) { return true; } cur = EEClass.Dump(cur.Parent_Class); } return false; }
public static EEClass Dump(string address) { EEClass cls = null; if (!classes.TryGetValue(address, out cls)) { StreamReader output = ExtensionApis.Execute("!dumpclass {0}", address); Dictionary<string, string> properties = null; while (!output.EndOfStream) { string key; string value; string line = output.ReadLine(); if (ExtensionApis.MatchRegex(header1RegExPattern, line)) { break; } if (!ExtensionApis.ParseKeyValuePair(line, out key, out value)) { throw ExtensionApis.ThrowKeyValueExceptionHelper(line, output); } if (properties == null) { properties = new Dictionary<string, string>(); } properties.Add(key, value); } if (properties == null) { throw ExtensionApis.ThrowExceptionHelper(null, null, output); } Dictionary<string, EEField> fields = new Dictionary<string, EEField>(); while (!output.EndOfStream) { string line = output.ReadLine(); // >> Domain:Value dynamic statics NYI 003a3960:NotInit << if (line.Contains(">> Domain:Value") || line.StartsWith("None") || line.Contains(">> Thread")) { continue; } EEField field = EEField.Parse(line); if (!fields.ContainsKey(field.Name)) { fields.Add(field.Name, field); } else { fields.Add(field.Name + "_" + field.Offset, field); } } cls = new EEClass(address, properties, fields, output); classes[address] = cls; } return cls; }