コード例 #1
0
ファイル: EEClass.cs プロジェクト: suwatch/cfexts
 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;
 }
コード例 #2
0
ファイル: EEClass.cs プロジェクト: suwatch/cfexts
        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;
        }