Пример #1
0
        public ChangerShouldImplementMethodDesc(string changerName, List <ChangerBranchData> brancheSources, FinallyBranchData finallyBranch)
        {
            var str = new List <string> {
                // add empty line.
                string.Empty,
                "	public Func<Auto<InitialParamType, UpdateParamType>, int, InitialParamType, Auto<InitialParamType, UpdateParamType>> Changer<InitialParamType, UpdateParamType> () {",
                "		return delegate (Auto<InitialParamType, UpdateParamType> auto, int frame, InitialParamType fixedContext) {",
                "			return "+ changerName + "(auto, frame, fixedContext);",
                "		};",
                "	}",
                "",
                "	public string ChangerName () {",
                "		return \""+ changerName + "\";",
                "	}",
                string.Empty
            };


            /*
             *                  add Effective checker.
             */
            var effectiveCheckerBrancheDescs = ChangerMethodDesc.GenerateEffectiveCheckBranchDescs(brancheSources);

            str.Add(
                "	public bool IsEffective<InitialParamType, UpdateParamType> (Auto<InitialParamType, UpdateParamType> baseAuto) {"
                );

            // add branch condition.
            if (effectiveCheckerBrancheDescs.Any())
            {
                str.AddRange(
                    new List <string> {
                    "		var conditions = baseAuto.Conditions();",
                    "		"
                }
                    );

                foreach (var effectiveCheckerBrancheDesc in effectiveCheckerBrancheDescs)
                {
                    str.Add(effectiveCheckerBrancheDesc.data);
                }
            }

            if (finallyBranch.IsExists())
            {
                str.AddRange(
                    new List <string> {
                    "	   // finally is ON.",
                    "		return true;"
                }
                    );
            }
            else
            {
                str.Add(
                    "		return false;"
                    );
            }

            str.Add(
                "	}"
                );

            data = string.Join("\n", str.ToArray());
        }
Пример #2
0
        public ChangerMethodDesc(string changerName, List <ChangerBranchData> brancheSources, FinallyBranchData finallyBranch)
        {
            var changerBranches = GenerateChangerBranchDescs(brancheSources);

            // add Changer method.
            var str = new List <string> {
                "	public static Auto<InitialParamType, UpdateParamType> ",
                "		"+ changerName,
                "		<InitialParamType, UpdateParamType>",
                "		(Auto<InitialParamType, UpdateParamType> baseAuto, int frame, InitialParamType fixedContext)",
                "	{"
            };

            if (changerBranches.Any())
            {
                str.AddRange(
                    new List <string> {
                    "		var conditions = baseAuto.Conditions();",
                    "		"
                }
                    );
            }

            var branchesDesc = changerBranches.Select(branch => branch.data).ToList();

            str.AddRange(branchesDesc);

            if (finallyBranch.IsExists())
            {
                var finallyAuto     = finallyBranch.finallyAutoId;
                var finallyInherits = finallyBranch.inheritTimelineConditions;

                str.AddRange(
                    new List <string> {
                    "		var finallyAuto = new ",
                    "			"+ finallyAuto,
                    "			<InitialParamType, UpdateParamType>(frame, fixedContext);"
                }
                    );

                if (finallyInherits.Any())
                {
                    var inheritsWithClass = finallyInherits.Select(inheritType => "typeof(AutoConditions." + inheritType + ")").ToArray();
                    var inheritConditions = string.Join(", ", inheritsWithClass);
                    str.AddRange(
                        new List <string> {
                        "			finallyAuto.InheritTimelines(baseAuto.ExportTimelines(new Type[] {",
                        "				"+ inheritConditions,
                        "			}));"
                    }
                        );
                }

                str.Add(
                    "		return finallyAuto;"
                    );
            }
            else
            {
                str.Add(
                    "		return baseAuto;"
                    );
            }

            str.Add(
                "	}"
                );


            // add empty line.
            str.Add(string.Empty);

            var effectiveCheckerBrancheDescs = GenerateEffectiveCheckBranchDescs(brancheSources);

            /*
             *                  add IsEffective method.
             */
            str.Add(
                "	public static bool IsEffectiveChanger<InitialParamType, UpdateParamType> (Auto<InitialParamType, UpdateParamType> baseAuto) {"
                );

            // add branch condition.
            if (effectiveCheckerBrancheDescs.Any())
            {
                str.AddRange(
                    new List <string> {
                    "		var conditions = baseAuto.Conditions();",
                    "		"
                }
                    );

                foreach (var effectiveCheckerBrancheDesc in effectiveCheckerBrancheDescs)
                {
                    str.Add(effectiveCheckerBrancheDesc.data);
                }
            }

            if (finallyBranch.IsExists())
            {
                str.AddRange(
                    new List <string> {
                    "	   // finally is ON.",
                    "		return true;"
                }
                    );
            }
            else
            {
                str.Add(
                    "		return false;"
                    );
            }

            str.Add(
                "	}"
                );

            data = string.Join("\n", str.ToArray());
        }