public string GenerateHeaderInclude(SirenClass sirenClass) { StringBuilder sb = new StringBuilder(); //sb.AppendLine(); foreach (var includeType in sirenClass.IncludeTypes) { var includeSirenClass = SirenFactory.FindClass(includeType); if (includeSirenClass != null) { if (!string.IsNullOrEmpty(includeSirenClass.Attribute.NewHeader)) { sb.AppendFormat("#include \"{0}/{1}.h\"\r\n", includeSirenClass.Attribute.Directory, includeSirenClass.Attribute.NewHeader); } else { sb.AppendFormat("#include \"{0}/{1}.h\"\r\n", includeSirenClass.Attribute.Directory, SirenFactory.GetTypeName(includeType)); } } else { sb.AppendFormat("#include \"{0}.h\"\r\n", SirenFactory.GetTypeName(includeType)); } } if (sirenClass.Attribute.Mode.HasFlag(SirenGenerateMode.SirenConfig)) { sb.AppendFormat("#include \"Core/Siren/ISirenConfig.h\"\r\n"); } return(sb.ToString()); }
public string GenerateHeaderCopy(SirenClass sirenClass) { var typeName = sirenClass.Name; StringBuilder sb = new StringBuilder(); //sb.AppendLine(); sb.AppendLine("public:"); //copy construct sb.AppendFormat("\t{0}(const {1}& other)\r\n", typeName, typeName); sb.AppendFormat("\t{{\r\n"); foreach (var sirenProperty in sirenClass.Properties) { var methodType = sirenProperty.MethodType; switch (methodType) { case SirenPropertyMethodType.Pointer: sb.AppendFormat("\t\tSAFE_CONSTRUCT_PTR({0},m{1},other.m{2});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name, sirenProperty.Name); break; case SirenPropertyMethodType.Value: case SirenPropertyMethodType.List: case SirenPropertyMethodType.Dictionary: sb.AppendFormat("\t\tm{0} = other.m{1};\r\n", sirenProperty.Name, sirenProperty.Name); break; } } sb.AppendFormat("\t}}\r\n"); //assign sb.AppendFormat("\t{0}& operator=(const {1}& other)\r\n", typeName, typeName); sb.AppendFormat("\t{{\r\n"); foreach (var sirenProperty in sirenClass.Properties) { var methodType = sirenProperty.MethodType; switch (methodType) { case SirenPropertyMethodType.Pointer: sb.AppendFormat("\t\tSAFE_COPY_PTR({0},m{1},other.m{2});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name, sirenProperty.Name); break; case SirenPropertyMethodType.Value: case SirenPropertyMethodType.List: case SirenPropertyMethodType.Dictionary: sb.AppendFormat("\t\tm{0} = other.m{1};\r\n", sirenProperty.Name, sirenProperty.Name); break; } } sb.AppendFormat("\t\treturn *this;\r\n"); sb.AppendFormat("\t}}\r\n"); return(sb.ToString()); }
public virtual void OnProperty(string name, ushort id, object obj, bool withHeader = true) { if (withHeader) { OnPropertyBegin(name, id, SirenFactory.GetDataType(obj.GetType())); OnValue(obj); OnPropertyEnd(); } else { OnValue(obj); } }
public override T OnProperty <T>(string name, ushort id, bool withHeader = true) { ushort outId; SirenFieldType outDataType; int r = OnPropertyBegin(name, id, SirenFactory.GetPropertyType(typeof(T)), out outId, out outDataType); if (r == 0) { var obj = OnValue(typeof(T)); OnPropertyEnd(); return((T)obj); } return(default(T)); }
public string GenerateHeaderMethod(SirenClass sirenClass) { StringBuilder sb = new StringBuilder(); //sb.AppendLine(); //add methods sb.AppendLine("public:"); foreach (var sirenProperty in sirenClass.Properties) { if (sirenProperty.Attribute.SuppressMethod) { continue; } var methodType = sirenProperty.MethodType; switch (methodType) { case SirenPropertyMethodType.Value: sb.AppendFormat("\tSIREN_METHOD({0}, {1});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.Pointer: sb.AppendFormat("\tSIREN_METHOD_PTR({0}, {1});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.List: var itemType = sirenProperty.Type.GenericTypeArguments[0]; sb.AppendFormat("\tSIREN_METHOD_LIST({0}, {1});\r\n", SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); break; case SirenPropertyMethodType.Dictionary: var keyType = sirenProperty.Type.GenericTypeArguments[0]; var valueType = sirenProperty.Type.GenericTypeArguments[1]; if (sirenProperty.Attribute.AddDictionaryMethods) { sb.AppendFormat("\tSIREN_METHOD_DICTIONARY_EX({0}, {1}, {2});\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); } else { sb.AppendFormat("\tSIREN_METHOD_DICTIONARY({0}, {1}, {2});\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); } break; } } return(sb.ToString()); }
public virtual T OnProperty <T>(string name, ushort id, bool withHeader = true) { if (withHeader) { ushort outId; SirenDataType outDataType; int r = OnPropertyBegin(name, id, SirenFactory.GetDataType(typeof(T)), out outId, out outDataType); if (r == 0) { var obj = OnValue(typeof(T)); OnPropertyEnd(); return((T)obj); } return(default(T)); } else { return((T)OnValue(typeof(T))); } }
public string GenerateHeaderField(SirenClass sirenClass) { StringBuilder sb = new StringBuilder(); //sb.AppendLine(); //add fields sb.AppendLine("protected:"); foreach (var sirenProperty in sirenClass.Properties) { var methodType = sirenProperty.MethodType; switch (methodType) { case SirenPropertyMethodType.Value: sb.AppendFormat("\t{0} m{1};\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.Pointer: sb.AppendFormat("\t{0}* m{1};\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.List: var itemType = sirenProperty.Type.GenericTypeArguments[0]; sb.AppendFormat("\tList<{0}> m{1};\r\n", SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); break; case SirenPropertyMethodType.Dictionary: var keyType = sirenProperty.Type.GenericTypeArguments[0]; var valueType = sirenProperty.Type.GenericTypeArguments[1]; sb.AppendFormat("\tDictionary<{0}, {1}> m{2};\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); break; } } return(sb.ToString()); }
public static void Register() { SirenFactory.RegisterTypeName <Scale2 <float> >("Scale2F"); SirenFactory.RegisterTypeName <Scale2 <uint> >("Scale2U"); }
public static void Register() { SirenFactory.RegisterTypeName <Point2 <float> >("Point2F"); SirenFactory.RegisterTypeName <Point2 <uint> >("Point2U"); }
public static void Register() { SirenFactory.RegisterTypeName <Padding4 <float> >("Padding4F"); SirenFactory.RegisterTypeName <Padding4 <uint> >("Padding4U"); }
public static void Register() { SirenFactory.RegisterTypeName <Range <float> >("RangeF"); SirenFactory.RegisterTypeName <Range <uint> >("RangeU"); }
public string GenerateHeaderSchema(SirenClass sirenClass) { var typeName = sirenClass.Name; StringBuilder sb = new StringBuilder(); //sb.AppendLine(); //add schema sb.AppendFormat("struct {0}::Schema\r\n", typeName); sb.AppendLine("{"); foreach (var sirenProperty in sirenClass.Properties) { var methodType = sirenProperty.MethodType; switch (methodType) { case SirenPropertyMethodType.Value: sb.AppendFormat("\tSIREN_PROPERTY({0}, {1}, {2}, {3}, {4}, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.Pointer: sb.AppendFormat("\tSIREN_PROPERTY({0}, {1}, {2}, {3}, {4}*, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name); break; case SirenPropertyMethodType.List: var itemType = sirenProperty.Type.GenericTypeArguments[0]; sb.AppendFormat("\tSIREN_PROPERTY_LIST({0}, {1}, {2}, {3}, {4}, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); break; case SirenPropertyMethodType.Dictionary: var keyType = sirenProperty.Type.GenericTypeArguments[0]; var valueType = sirenProperty.Type.GenericTypeArguments[1]; sb.AppendFormat("\tSIREN_PROPERTY_DICTIONARY({0}, {1}, {2}, {3}, {4}, {5}, m{6});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name); break; } } //add properties if (sirenClass.IsRoot) { sb.AppendFormat("\tSIREN_PROPERTIES_{0}(void,{1});\r\n", sirenClass.Properties.Count, typeName); } else { sb.AppendFormat("\tSIREN_PROPERTIES_{0}({1},{2});\r\n", sirenClass.Properties.Count, sirenClass.BaseSirenClass.Name, typeName); } sb.Append("};"); return(sb.ToString()); }
public override void OnProperty(string name, ushort id, object obj, bool withHeader = true) { OnPropertyBegin(name, id, SirenFactory.GetDataType(obj.GetType())); OnValue(obj); OnPropertyEnd(); }