public override bool Parse(TypeDesc desc) { this.Parent = desc.Parent; this.builtinParent = desc.builtinParent; this.isTemplateClass = desc.isTemplateClass; this.Category = desc.Category; this.BindingClass = desc.BindingClass; this.BindingClassMacro = desc.BindingClassMacro; this.crc = Crc32.Calc(this.Name, this.CrcMask); return(ParseDescFields(desc)); }
public int GetID(string str, bool autoGen = false) { int ret = 0; if (!record.idMap.TryGetValue(str, out ret)) { if (autoGen) { // todo: 临时使用CRC32,后面需要支持多人、多分支并行开发时保证ID不重复 ret = (int)Crc32.Calc(str); record.idMap[str] = ret; } else { GLog.LogError("Template of {0} is not defined.", str); } } return(ret); }
public override GData ReadData(JsonData jsonData, bool inherit, GStructField field, DataDebugInfo ownerDebugInfo) { GObject obj = new GObject(Name); obj.inheritParent = inherit; obj.debugInfo = ownerDebugInfo; // TODO: check errors // todo: 检查是否已经定义为 Category.Name 格式 if (string.IsNullOrEmpty(this.Category)) { obj.ID = (string)jsonData["ID"]; } else { obj.ID = this.Category + "." + (string)jsonData["ID"]; } obj.debugInfo.ownerTID = obj.ID; if (jsonData.Keys.Contains("RuntimeLink")) { obj.isRuntimeLink = (bool)jsonData["RuntimeLink"]; } // todo: 检查是否已经定义为 Category.Name 格式 if (jsonData.Keys.Contains("Parent")) { if (string.IsNullOrEmpty(this.Category)) { obj.Parent = (string)jsonData["Parent"]; } else { obj.Parent = this.Category + "." + (string)jsonData["Parent"]; } } if (jsonData.Keys.Contains("Singleton")) { try { obj.singletonType = (GObject.SingletonType)Enum.Parse(typeof(GObject.SingletonType), (string)jsonData["Singleton"]); } catch (Exception ex) { GLog.LogError("Unrecognized SingletonType '{0}' {1}", (string)jsonData["Singleton"], obj.debugInfo); } } if (jsonData.Keys.Contains("CrcMask")) { obj.CrcMask = (uint)(int)jsonData["CrcMask"]; } obj.crc = Crc32.Calc(obj.ID, obj.CrcMask); if (!ReadData_Impl(obj, jsonData, field)) { return(null); } return(obj); }
public override bool ParseJson(JsonData data) { this.isTemplateClass = true; this.Gen_Head = true; this.Gen_Serialize = false; this.Gen_Deserialize = true; JsonData classHeader; JsonData classData = data["Class"]; if (classData.IsObject) { classHeader = classData; // name if (!classHeader.Keys.Contains("Name")) { GLog.LogError(data.ToJson() + "\n 'Name' is required'"); return(false); } this.Name = (string)classHeader["Name"]; } else { classHeader = data; this.Name = (string)classData; } // parent if (classHeader.Keys.Contains("Parent")) { this.Parent = (string)classHeader["Parent"]; } else { this.builtinParent = "BaseTemplate"; } // Category if (classHeader.Keys.Contains("Category")) { if (!string.IsNullOrEmpty(this.Parent)) { GLog.LogError("Category can be declared only in root class. Error in " + this.Name + "\nGType.Parse: \n" + data.ToJson()); } else { this.Category = (string)classHeader["Category"]; } } // Binding class if (classHeader.Keys.Contains("BindingClass")) { this.BindingClass = (string)classHeader["BindingClass"]; } // Binding class macro if (classHeader.Keys.Contains("BindingClassMacro")) { this.BindingClassMacro = (string)classHeader["BindingClassMacro"]; } // Multiton /* if (classHeader.Keys.Contains("Multiton")) * this.Multiton = (bool)classHeader["Multiton"]; * else * this.Multiton = false;*/ // type id // disable CrcMask // if (classHeader.Keys.Contains("CrcMask")) // this.CrcMask = (uint)(int)classHeader["CrcMask"]; this.crc = Crc32.Calc(this.Name, this.CrcMask); // TODO: check repeated typeid, in a Mgr.CheckErrors() method return(ParseJsonFields(data)); }