Example #1
0
        public static GrowOnlySet <TValue> AddWithReferenceEquality <TKey, TValue>(GrowOnlyHashTable <TKey, GrowOnlySet <TValue> > ht,
                                                                                   TKey key,
                                                                                   TValue value) where TValue : class
        {
            GrowOnlySet <TValue> set = CreateWithReferenceEquality(ht, key);

            set.Insert(value);

            return(set);
        }
Example #2
0
        public static GrowOnlySet <TValue> Add <TKey, TValue>(GrowOnlyHashTable <TKey, GrowOnlySet <TValue> > ht,
                                                              TKey key,
                                                              TValue value)
        {
            GrowOnlySet <TValue> set = Create(ht, key);

            set.Insert(value);

            return(set);
        }
Example #3
0
        protected void Visit(ITreeNode <FC> node)
        {
            ProcessBefore(node);

            m_visited.Insert(node);

            for (int pass = 0; pass < 2; pass++)
            {
                foreach (ITreeEdge <FC> edge in node.Successors)
                {
                    var bbSucc = edge.Successor;

                    //
                    // On the first pass, follow only non-dead branches.
                    //
                    // Dead branches are almost always exception-throwing branches,
                    // following them after the other branches ensures that they don't show up in TreeEdges.
                    //
                    if (pass == 0 == (bbSucc.FlowControl is IDeadBranch))
                    {
                        continue;
                    }


                    if (m_visited.Contains(bbSucc) == false)
                    {
                        ProcessEdgeBefore(edge);

                        Visit(bbSucc);

                        ProcessEdgeAfter(edge);
                    }
                    else
                    {
                        ProcessEdgeNotTaken(edge);
                    }
                }
            }

            ProcessAfter(node);
        }