public FQSMapWorkItem(T profile, FQSMapWorkItem parent) { this.Profile = profile; if (parent != null) { this.Visited = new HashSet <T>(parent.Visited); this.ProfileSequence = new List <T>(parent.ProfileSequence); } else { this.Visited = new HashSet <T>(); this.ProfileSequence = new List <T>(); } this.Visited.Add(profile); this.ProfileSequence.Add(profile); }
/// <summary> /// Builds dictionaries relating fully qualified symbol names to profiles. /// </summary> protected void BuildFullyQualifiedMaps() { Queue <FQSMapWorkItem> workItemQueue = new Queue <FQSMapWorkItem>( from T p in this.CompositionMap.Roots select new FQSMapWorkItem(p, null) ); this.FullyQualifiedNameMap = new Dictionary <string, T>(); this.FullyQualifiedSymbolMap = new Dictionary <string, T>(); while (workItemQueue.Count > 0) { FQSMapWorkItem wi = workItemQueue.Dequeue(); if (wi.Profile.FullSymbol != null) { this.FullyQualifiedSymbolMap[wi.Profile.FullSymbol] = wi.Profile; } if (wi.Profile.FullName != null) { this.FullyQualifiedNameMap[wi.Profile.FullName] = wi.Profile; } foreach (DirectedEdge edge in this.CompositionMap.Successors(wi.Profile)) { T target = (T)edge.Target; if (wi.Visited.Contains(target)) { continue; } workItemQueue.Enqueue(new FQSMapWorkItem(target, wi)); } } }