public void CreateCommodityGraphs() { lock (objectToLock) { log.DebugFormat( "CreateCommodityGraphs: {0}", meapContext.Commodities.Count); foreach (KeyValuePair <long, Commodity> p in meapContext.Commodities) { long commodityId = p.Key; Commodity commodity = p.Value; DAG Gi = new("Gi"); DAG.MakeCommodity(meapContext.TArbSeqCFG, commodity.sNodeId, commodity.tNodeId, Gi); commodity.Gi = Gi; } ICommonOptions commonOptions = configuration.Get <ICommonOptions>(); ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>(); if (commonOptions.CheckDataStructures) { checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext); } ExcludeDefs(); if (commonOptions.CheckDataStructures) { checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext); } } }
private void ExcludeDefs() { foreach (KeyValuePair <long, Commodity> p in meapContext.Commodities) { Commodity commodity = p.Value; long commVar = commodity.Variable; List <long> toRemove = new(); foreach (long uNodeId in commodity.Gi.GetInnerNodeIds()) { ICollection <long> uVars = meapContext.Assignments[uNodeId]; if (uVars.Contains(commVar)) { toRemove.Add(uNodeId); } } toRemove.ForEach(r => commodity.Gi.RemoveNode(commodity.Gi.NodeEnumeration[r])); toRemove.ForEach(r => log.Debug( "var " + commVar + " " + commodity.Gi.GetSourceNodeId() + ", " + commodity.Gi.GetSinkNodeId() + " remove: " + r)); DAG newGi = new("Gi"); DAG.CutChains(commodity.Gi, newGi); commodity.Gi = newGi; excludedDefs.AddRange(toRemove); } ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>(); checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext); }