private void CreateBinaryLoadMethod() { StringBuilder loadMethodBody = new StringBuilder(); foreach (var p in _SaveClass.Properties) { switch (p.Type) { case PropertyType.Primitive: PrimitivePropertyData pp = (PrimitivePropertyData)p; loadMethodBody.AppendLine(string.Format("this.{0} = stream.{1}();", Variable.GetName(p.Name), GetLoadMethodName(pp.PrimitiveType, pp.IsArray, pp.SafeMemory))); break; case PropertyType.Class: ClassPropertyData cp = (ClassPropertyData)p; loadMethodBody.AppendLine(string.Format("this.{0} = stream.{1}( {2}.{3} );", Variable.GetName(p.Name), GetSavableMethodName(cp.ClassName, cp.IsArray), cp.ClassName, GetStaticCreatorMethodName(cp.ClassName))); break; } } loadMethodBody.AppendLine("SetAsClean();"); Method loadBinaryMethod = new Method("void", "Load", loadMethodBody.ToString(), "Skill.Framework.IO.BinaryLoadStream stream"); loadBinaryMethod.Modifier = Modifiers.Public; Add(loadBinaryMethod); }
private void CreateIsDirtyProperty() { StringBuilder isDirtyBody = new StringBuilder(); bool hasClassProperty = false; foreach (var p in _SaveClass.Properties) { if (p.Type == PropertyType.Class) { if (!hasClassProperty) { isDirtyBody.AppendLine("if(_IsDirty) return _IsDirty;"); hasClassProperty = true; } ClassPropertyData cp = p as ClassPropertyData; ClassData cd = FindClass(cp.ClassName); if (cd != null) { string pName = Variable.GetName(p.Name); if (p.IsArray) { isDirtyBody.AppendLine(string.Format("if({0} != null) {{", pName)); isDirtyBody.AppendLine(string.Format("for (int i = 0; i < {0}.Length; i++) {{", pName)); if (!cd.IsStruct) { isDirtyBody.AppendLine(string.Format("if({0}[i] != null && {0}[i].IsDirty) return true;", pName)); } else { isDirtyBody.AppendLine(string.Format("if({0}[i].IsDirty) return true;", pName)); } isDirtyBody.AppendLine("}"); isDirtyBody.AppendLine("}"); } else { if (!cd.IsStruct) { isDirtyBody.AppendLine(string.Format("if({0} != null)", pName)); } isDirtyBody.AppendLine(string.Format("if({0}.IsDirty) return true;", pName)); } } } } isDirtyBody.AppendLine("return _IsDirty;"); Property isDirtyProperty = new Property("bool", "IsDirty", Variable.GetName("IsDirty"), false); isDirtyProperty.Comment = "is any changes happened to savable object"; isDirtyProperty.SetGetBody(isDirtyBody.ToString()); Add(isDirtyProperty); Add(new Variable("bool", "IsDirty")); }
private void SaveProfile(string Name) { if (string.IsNullOrWhiteSpace(Name)) { Name = "default"; } string ConfigFileName = ConfigFileName_Prefix + Name.ToLower() + ConfigFileName_Suffix; ClassPropertyData.SaveToFile(this, ConfigFileName); }
/// <summary> /// Create variables and properties /// </summary> private void CreateProperties() { foreach (var p in _SaveClass.Properties) { switch (p.Type) { case PropertyType.Primitive: PrimitivePropertyData pp = p as PrimitivePropertyData; if (p.IsArray) { Add(new Variable(string.Format("{0}[]", ConvertToString(pp.PrimitiveType, pp.SafeMemory)), p.Name)); Add(new Property(string.Format("{0}[]", ConvertToString(pp.PrimitiveType, pp.SafeMemory)), p.Name, Variable.GetName(p.Name), true, Property.DirtyMode.CheckAndSet) { Comment = p.Comment }); } else { Add(new Variable(ConvertToString(pp.PrimitiveType, pp.SafeMemory), p.Name)); Add(new Property(ConvertToString(pp.PrimitiveType, pp.SafeMemory), p.Name, Variable.GetName(p.Name), true, Property.DirtyMode.CheckAndSet) { Comment = p.Comment }); } break; case PropertyType.Class: ClassPropertyData cp = p as ClassPropertyData; if (p.IsArray) { Add(new Variable(string.Format("{0}[]", cp.ClassName), p.Name)); Add(new Property(string.Format("{0}[]", cp.ClassName), p.Name, Variable.GetName(p.Name), true, Property.DirtyMode.CheckAndSet) { Comment = p.Comment }); } else { Add(new Variable(cp.ClassName, p.Name)); ClassData cd = FindClass(cp.ClassName); Add(new Property(cp.ClassName, p.Name, Variable.GetName(p.Name), true, cd.IsStruct ? Property.DirtyMode.Set : Property.DirtyMode.CheckAndSet) { Comment = p.Comment }); } break; default: break; } } }
private void LoadProfile(string Name) { if (string.IsNullOrWhiteSpace(Name)) { return; } string ConfigFileName = ConfigFileName_Prefix + Name.ToLower() + ConfigFileName_Suffix; ClassPropertyData.LoadFromFile(this, ConfigFileName); Current_ProfileName = Name; }
private void CreateSetAsCleanMethod() { StringBuilder setAsCleanBody = new StringBuilder(); setAsCleanBody.AppendLine("_IsDirty = false;"); foreach (var p in _SaveClass.Properties) { if (p.Type == PropertyType.Class) { ClassPropertyData cp = p as ClassPropertyData; ClassData cd = FindClass(cp.ClassName); if (cd != null) { string pName = Variable.GetName(p.Name); if (p.IsArray) { setAsCleanBody.AppendLine(string.Format("if({0} != null) {{", pName)); setAsCleanBody.AppendLine(string.Format("for (int i = 0; i < {0}.Length; i++) {{", pName)); if (!cd.IsStruct) { setAsCleanBody.AppendLine(string.Format("if({0}[i] != null)", pName)); } setAsCleanBody.AppendLine(string.Format("{0}[i].SetAsClean();", pName)); setAsCleanBody.AppendLine("}"); setAsCleanBody.AppendLine("}"); } else { if (!cd.IsStruct) { setAsCleanBody.AppendLine(string.Format("if({0} != null)", pName)); } setAsCleanBody.AppendLine(string.Format("{0}.SetAsClean();", pName)); } } } } Add(new Method("void", "SetAsClean", setAsCleanBody.ToString()) { Modifier = Modifiers.Public }); }
private void CreateXmlLoadMethods() { StringBuilder loadXmlBody = new StringBuilder(); loadXmlBody.AppendLine("Skill.Framework.IO.XmlElement element = e.FirstChild as Skill.Framework.IO.XmlElement;"); loadXmlBody.AppendLine("while (element != null)"); loadXmlBody.AppendLine("{"); loadXmlBody.AppendLine("switch (element.Name)"); loadXmlBody.AppendLine("{"); foreach (var p in _SaveClass.Properties) { loadXmlBody.AppendLine(string.Format("case \"{0}\":", p.Name)); switch (p.Type) { case PropertyType.Primitive: PrimitivePropertyData pp = (PrimitivePropertyData)p; loadXmlBody.AppendLine(string.Format("this.{0} = stream.{1}( element );", Variable.GetName(p.Name), GetLoadMethodName(pp.PrimitiveType, pp.IsArray, pp.SafeMemory))); break; case PropertyType.Class: ClassPropertyData cp = (ClassPropertyData)p; loadXmlBody.AppendLine(string.Format("this.{0} = stream.{1}( element , {2}.{3} );", Variable.GetName(p.Name), GetSavableMethodName(cp.ClassName, cp.IsArray), cp.ClassName, GetStaticCreatorMethodName(cp.ClassName))); break; } loadXmlBody.AppendLine("break;"); } loadXmlBody.AppendLine("}"); loadXmlBody.AppendLine("element = e.GetNextSibling(element);"); loadXmlBody.AppendLine("}"); loadXmlBody.AppendLine("SetAsClean();"); Method loadMethod = new Method("void", "Load", loadXmlBody.ToString(), "Skill.Framework.IO.XmlElement e", "Skill.Framework.IO.XmlLoadStream stream"); loadMethod.Modifier = Modifiers.Public; Add(loadMethod); }