//Добавить модуль public void AddModule(string code) { if (!_modules.ContainsKey(code)) { var smod = Project.SchemeModules[code]; var mod = new TablikModule(this, code, smod.Name, smod.Description); _modules.Add(code, mod); foreach (var m in smod.LinkedModules.Values) { AddModule(m); mod.LinkedModules.Add(_modules[m]); } foreach (var c in smod.LinkedConnects.Values) { if (Project.SchemeSources.ContainsKey(c)) { mod.LinkedSources.Add(Sources[c]); } if (Project.SchemeReceivers.ContainsKey(c)) { mod.LinkedReceivers.Add(Receivers[c]); } } } }
public TablikCalcParam(TablikModule module, IRecordRead rec, bool isSubParam, bool isGenerated) : base(rec, isSubParam) { Module = module; Keeper = new TablikKeeper(this); IsGenerated = isGenerated; if (!Code.IsCorrectCode()) { ErrMess += "Указан недопустимый код расчетного параметра; "; IsFatalError = true; } CalcOn = rec.GetBool("CalcOn"); UserExpr1 = rec.GetString("UserExpr1", ""); if (UserExpr1 == "") { ErrMess += "Не заполнено расчетное выражение; "; IsFatalError = true; } UserExpr2 = rec.GetString("UserExpr2", ""); if (UserExpr2 == "") { ErrMess += "Не заполнено управляющее выражение; "; IsFatalError = true; } InputsStr = rec.GetString("Inputs"); JoinToParamTree(); }
//Конструктор для тестов public TablikCalcParam(TablikModule module, string code, string expr1, string expr2 = "Расчет") : base(false) { Module = module; Code = code; UserExpr1 = expr1; UserExpr2 = expr2; Keeper = new TablikKeeper(this); }
//Определение порядка вычисления модулей internal void MakeModuleGraph(TablikModule m) { m.DfsStatus = DfsStatus.Process; foreach (var lm in m.LinkedModules) { if (lm.DfsStatus == DfsStatus.Before) { MakeModuleGraph(lm); } else if (lm.DfsStatus == DfsStatus.Process) { AddWarning("Циклическая зависимость модулей", null, lm.Code); } } ModulesOrder.Add(m); m.DfsStatus = DfsStatus.After; }