Ejemplo n.º 1
0
        private bool CompileMode(CodeCompileUnit unit, out IUtilityComponentMode optimizedMode, ref string error)
        {
            var options = new CompilerParameters();

            options.IncludeDebugInformation = false;
            options.GenerateInMemory        = true;
            options.CompilerOptions         = "/optimize";
            CodeDomProvider compiler = CodeDomProvider.CreateProvider("CSharp");
            var             results  = compiler.CompileAssemblyFromDom(options, unit);

            if (this.IncludeCode)
            {
                using (StreamWriter writer = new StreamWriter(String.Format("TMG.Modes.Generated.OptimizedMode{0}.cs", this.ModeName)))
                {
                    //var results = compiler.CompileAssemblyFromDom( options, writer, unit );
                    compiler.GenerateCodeFromCompileUnit(unit, writer, new CodeGeneratorOptions());
                }
            }
            if (results.Errors.Count != 0)
            {
                error         = results.Errors[0].ToString();
                optimizedMode = null;
                return(false);
            }
            var assembly    = results.CompiledAssembly;
            var theClass    = assembly.GetType(String.Format("TMG.Modes.Generated.OptimizedMode{0}", this.ModeName));
            var constructor = theClass.GetConstructor(new Type[0]);

            optimizedMode = constructor.Invoke(new object[0]) as IUtilityComponentMode;
            return(true);
        }
Ejemplo n.º 2
0
        private bool AttachUtilityComponentObjects(IUtilityComponentMode optimizedMode, ref string error)
        {
            var initFunction = optimizedMode.GetType().GetMethod("InitialzeUtilities");

            if (this.FeasibilityCalculation != null)
            {
                initFunction.Invoke(optimizedMode, new object[] { this.FeasibilityCalculation, this.UtilityComponents });
            }
            else
            {
                initFunction.Invoke(optimizedMode, new object[] { this.UtilityComponents });
            }
            return(true);
        }
Ejemplo n.º 3
0
        private bool CreateOptimizedMode(out IUtilityComponentMode optimizedMode, ref string error)
        {
            CodeCompileUnit unit = new CodeCompileUnit();

            AddReferences(unit);
            CodeNamespace       namespaceXTMF = AddNamespaces(unit);
            CodeTypeDeclaration modeClass     = new CodeTypeDeclaration(String.Format("OptimizedMode{0}", this.ModeName));

            modeClass.BaseTypes.Add(typeof(IUtilityComponentMode));
            modeClass.IsClass        = true;
            modeClass.TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed;
            AttachBasicModeProperties(modeClass);
            AttachConstructor(modeClass);
            AttachFeasible(modeClass);
            AttachRuntimeValidation(modeClass);
            AttachUtilityComponentInitializationMethod(modeClass);
            namespaceXTMF.Types.Add(modeClass);
            return(CompileMode(unit, out optimizedMode, ref error));
        }
Ejemplo n.º 4
0
        private bool RemoveUsThenAddToParent(IUtilityComponentMode optimizedMode, ref string error)
        {
            var parentCat  = this.Parent as IModeCategory;
            var parentRoot = this.Parent as I4StepModel;

            if (parentCat != null)
            {
                var ourLocation = parentCat.Children.IndexOf(this);
                parentCat.Children.Insert(ourLocation, optimizedMode);
                parentCat.Children.Remove(this);
            }
            else if (parentRoot != null)
            {
                var ourLocation = parentRoot.Modes.IndexOf(this);
                parentRoot.Modes.Insert(ourLocation, optimizedMode);
                parentRoot.Modes.Remove(this);
            }
            else
            {
                error = "In '" + this.Name + "' we were unable to work with a parent module of type '" + this.Parent.GetType().FullName + "'!";
                return(false);
            }
            return(true);
        }