Ejemplo n.º 1
0
        public static string Changer(string changerName, List <string> routingComments, List <BranchData> brancheSourcesList, FinallyBranchData finallyBranch)
        {
            var classCommentBase = new List <string> {
                changerName, "generated Changer by Automatine."
            };

            classCommentBase.AddRange(routingComments);

            var brancheSources = new List <ChangerBranchData>();

            foreach (var branch in brancheSourcesList)
            {
                brancheSources.Add(new ChangerBranchData(branch));
            }

            var classDesc = new NoConstructorClassDescriptor(
                new List <string> {
                "System", "Automatine"
            },
                classCommentBase,
                "public",
                string.Empty,
                AutomatineDefinitions.Changer.CLASS_HEADER + changerName + " : " + AutomatineDefinitions.Changer.INTERFACE_NAME,
                () =>
            {
                var source = new ChangerMethodDesc(changerName, brancheSources, finallyBranch);
                return(source.data);
            },
                () =>
            {
                var source = new ChangerShouldImplementMethodDesc(changerName, brancheSources, finallyBranch);
                return(source.data);
            }
                );

            return(classDesc.data);
        }
Ejemplo n.º 2
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());
        }