Ejemplo n.º 1
0
        public void Measure(IEdgeEnumerable edges)
        {
            Clear();

            // count the number of passages
            int count = 0;

            foreach (IEdge e in edges)
            {
                if (this.passCounts[e] == 0)
                {
                    ++count;
                }
                this.passCounts[e]++;
            }

            // compute covergage
            if (this.graph.EdgesEmpty)
            {
                this.coverage = 0;
            }
            else
            {
                this.coverage = count / (double)this.graph.EdgesCount;
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Adds the elements of another EdgeCollection to the end of this EdgeCollection.
 /// </summary>
 /// <param name="items">
 /// The EdgeCollection whose elements are to be added to the end of this EdgeCollection.
 /// </param>
 public void AddRange(IEdgeEnumerable items)
 {
     foreach (IEdge item in items)
     {
         this.List.Add(item);
     }
 }
 public void Measure(IEdgeEnumerable edges)
 {
     this.Clear();
     int num = 0;
     IEdgeEnumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         EdgeIntDictionary dictionary;
         IEdge edge2;
         IEdge edge = enumerator.get_Current();
         if (this.passCounts.get_Item(edge) == 0)
         {
             num++;
         }
         (dictionary = this.passCounts).set_Item(edge2 = edge, dictionary.get_Item(edge2) + 1);
     }
     if (this.graph.get_EdgesEmpty())
     {
         this.coverage = 0.0;
     }
     else
     {
         this.coverage = ((double) num) / ((double) this.graph.get_EdgesCount());
     }
 }
Ejemplo n.º 4
0
        public void MeasurePath(IEdgeEnumerable edges)
        {
            Clear();

            // count the number of passages
            int  count   = 0;
            bool isFirst = true;

            foreach (IEdge e in edges)
            {
                if (isFirst)
                {
                    this.passCounts[e.Source]++;
                    isFirst = false;
                }
                if (this.passCounts[e.Target] == 0)
                {
                    ++count;
                }
                this.passCounts[e.Target]++;
            }

            // compute covergage
            if (this.graph.VerticesEmpty)
            {
                this.coverage = 0;
            }
            else
            {
                this.coverage = count / (double)this.graph.VerticesCount;
            }
        }
Ejemplo n.º 5
0
        private void VisitEdges(IEdgeEnumerable outEdges, bool forward)
        {
            IVertex target = null;

            foreach (IEdge e in outEdges)
            {
                OnExamineEdge(e);

                if (forward)
                {
                    target = e.Target;
                }
                else
                {
                    target = e.Source;
                }

                GraphColor vc = Colors[target];
                GraphColor ec = EdgeColors[e];

                EdgeColors[e] = GraphColor.Black;
                if (vc == GraphColor.White) // tree edge
                {
                    OnTreeEdge(e);
                    Visit(target);
                }
                else if (vc == GraphColor.Gray && ec == GraphColor.White)
                {
                    OnBackEdge(e);
                }
            }
        }
 internal IEdge NextState(int edgeCount, IEdgeEnumerable edges)
 {
     if (edgeCount == 0)
     {
         return null;
     }
     double num = this.rnd.NextDouble();
     int num2 = (int) Math.Floor(edgeCount * num);
     if (num2 == edgeCount)
     {
         num2--;
     }
     int num3 = 0;
     IEdgeEnumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge edge = enumerator.get_Current();
         if (num3 == num2)
         {
             return edge;
         }
         num3++;
     }
     throw new InvalidOperationException("This is a bug");
 }
Ejemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="edges"></param>
        /// <param name="count"></param>
        /// <param name="rnd"></param>
        /// <returns></returns>
        public static IEdge Edge(IEdgeEnumerable edges, int count, Random rnd)
        {
            if (edges == null)
            {
                throw new ArgumentNullException("edges");
            }
            if (rnd == null)
            {
                throw new ArgumentNullException("random generator");
            }
            if (count == 0)
            {
                throw new ArgumentException("edges is empty");
            }

            int i = rnd.Next(count);

            foreach (IEdge e in edges)
            {
                if (i == 0)
                {
                    return(e);
                }
                else
                {
                    --i;
                }
            }

            // failed
            throw new ArgumentOutOfRangeException("count");
        }
Ejemplo n.º 8
0
        internal IEdge NextState(
            int edgeCount,
            IEdgeEnumerable edges
            )
        {
            if (edgeCount == 0)
            {
                return(null);
            }

            double r  = this.rnd.NextDouble();
            int    nr = (int)Math.Floor(edgeCount * r);

            if (nr == edgeCount)
            {
                --nr;
            }

            int i = 0;

            foreach (IEdge e in edges)
            {
                if (i == nr)
                {
                    return(e);
                }
                ++i;
            }
            throw new InvalidOperationException("This is a bug");
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Returns the first vertex of the enumerable
 /// </summary>
 /// <param name="edges">enumerable collection of <see cref="IEdge"/></param>
 /// <returns>first target vertex if any, otherwise a null reference</returns>
 public static IVertex FirstTargetVertex(IEdgeEnumerable edges)
 {
     IEdge e = FirstEdge(edges);
     if (e!=null)
         return e.Target;
     else
         return null;
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Returns the first source vertex of the enumerable
 /// </summary>
 /// <param name="edges">enumerable collection of <see cref="IEdge"/></param>
 /// <returns>first source vertex if any, otherwise a null reference</returns>
 public static IVertex FirstSourceVertex(IEdgeEnumerable edges)
 {
     IEdge e = FirstEdge(edges);
     if (e!=null)
         return e.Source;
     else
         return null;
 }
Ejemplo n.º 11
0
 public TargetVertexEnumerator(IEdgeEnumerable edges)
 {
     if (edges == null)
     {
         throw new ArgumentNullException("edges");
     }
     this.enumerator = edges.GetEnumerator();
 }
Ejemplo n.º 12
0
		/// <summary>
		/// Filtered edge collection
		/// </summary>
		/// <param name="ec">base collection</param>
		/// <param name="ep">filtering predicate</param>
		public FilteredEdgeEnumerable(IEdgeEnumerable ec, IEdgePredicate ep)
		{
			if (ec == null)
				throw new ArgumentNullException("edge collection");
			if (ep == null)
				throw new ArgumentNullException("edge predicate");

			m_EdgeCollection = ec;
			m_EdgePredicate = ep;
		}
Ejemplo n.º 13
0
 /// <summary>
 /// Returns the first edge of the graph
 /// </summary>
 /// <param name="edges">graph</param>
 /// <returns>first edge if any, otherwise a null reference</returns>
 public static IEdge FirstEdge(IEdgeEnumerable edges)
 {
     if (edges==null)
         throw new ArgumentNullException("edges");
     IEdgeEnumerator en = edges.GetEnumerator();
     if (!en.MoveNext())
         return null;
     else
         return en.Current;
 }
Ejemplo n.º 14
0
        /// <summary>
        /// Returns the last source vertex of the enumerable
        /// </summary>
        /// <param name="edges">enumerable collection of <see cref="IEdge"/></param>
        /// <returns>last source vertex if any, otherwise a null reference</returns>
        public static IVertex LastSourceVertex(IEdgeEnumerable edges)
        {
            IEdge e = LastEdge(edges);

            if (e != null)
            {
                return(e.Source);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Returns the last vertex of the enumerable
        /// </summary>
        /// <param name="edges">enumerable collection of <see cref="IEdge"/></param>
        /// <returns>last target vertex if any, otherwise a null reference</returns>
        public static IVertex LastTargetVertex(IEdgeEnumerable edges)
        {
            IEdge e = LastEdge(edges);

            if (e != null)
            {
                return(e.Target);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 16
0
        private IEdge SelectSingleOutEdgeNotInCircuit(IVertex v)
        {
            IEdgeEnumerable en  = this.SelectOutEdgesNotInCircuit(v);
            IEdgeEnumerator eor = en.GetEnumerator();

            if (!eor.MoveNext())
            {
                return(null);
            }
            else
            {
                return(eor.Current);
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Filtered edge collection
        /// </summary>
        /// <param name="ec">base collection</param>
        /// <param name="ep">filtering predicate</param>
        public FilteredEdgeEnumerable(IEdgeEnumerable ec, IEdgePredicate ep)
        {
            if (ec == null)
            {
                throw new ArgumentNullException("edge collection");
            }
            if (ep == null)
            {
                throw new ArgumentNullException("edge predicate");
            }

            m_EdgeCollection = ec;
            m_EdgePredicate  = ep;
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Returns the last edge of the edge collection
        /// </summary>
        /// <param name="edges">edge collection</param>
        /// <returns>last edge if any, otherwise a null reference</returns>
        public static IEdge LastEdge(IEdgeEnumerable edges)
        {
            if (edges == null)
            {
                throw new ArgumentNullException("edges");
            }
            IEdgeEnumerator en      = edges.GetEnumerator();
            IEdge           current = null;

            while (en.MoveNext())
            {
                current = en.Current;
            }

            return(current);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Visits vertex s
        /// </summary>
        /// <param name="u">vertex to visit</param>
        public void Visit(IVertex u)
        {
            VertexEventArgs uArgs = new VertexEventArgs(u);

            Colors[u] = GraphColor.Gray;
            OnDiscoverVertex(u);

            IEdgeEnumerable outEdges = VisitedGraph.OutEdges(u);

            VisitEdges(outEdges, true);
            IEdgeEnumerable intEdges = VisitedGraph.InEdges(u);

            VisitEdges(intEdges, false);

            Colors[u] = GraphColor.Black;
            OnFinishVertex(u);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Returns the first edge of the graph
        /// </summary>
        /// <param name="edges">graph</param>
        /// <returns>first edge if any, otherwise a null reference</returns>
        public static IEdge FirstEdge(IEdgeEnumerable edges)
        {
            if (edges == null)
            {
                throw new ArgumentNullException("edges");
            }
            IEdgeEnumerator en = edges.GetEnumerator();

            if (!en.MoveNext())
            {
                return(null);
            }
            else
            {
                return(en.Current);
            }
        }
        public void Measure(IEdgeEnumerable edges)
        {
            Clear();

            // count the number of passages
            int count=0;
            foreach(IEdge e in edges)
            {
                if (this.passCounts[e]==0)
                    ++count;
                this.passCounts[e]++;
            }

            // compute covergage
            if (this.graph.EdgesEmpty)
                this.coverage =0;
            else
                this.coverage = count / (double)this.graph.EdgesCount;
        }
Ejemplo n.º 22
0
        internal void WriteEdges(EdgeColorDictionary edgeColors,
                                 IEdgeEnumerable edges)
        {
            foreach (IEdge e in edges)
            {
                if (edgeColors[e] != GraphColor.White)
                {
                    continue;
                }

                Output.Write("{0} -> {1} [",
                             e.Source.ID,
                             e.Target.ID
                             );

                OnWriteEdge(e);
                OnFormatEdge(EdgeFormat, e);
                Output.WriteLine("];");

                edgeColors[e] = GraphColor.Black;
            }
        }
        public void MeasurePath(IEdgeEnumerable edges)
        {
            Clear();

            // count the number of passages
            int count=0;
            bool isFirst = true;
            foreach(IEdge e in edges)
            {
                if (isFirst)
                {
                    this.passCounts[e.Source]++;
                    isFirst = false;
                }
                if (this.passCounts[e.Target]==0)
                    ++count;
                this.passCounts[e.Target]++;
            }

            // compute covergage
            if (this.graph.VerticesEmpty)
                this.coverage =0;
            else
                this.coverage = count / (double)this.graph.VerticesCount;
        }
 public TargetVertexEnumerator(IEdgeEnumerable edges)
 {
     if (edges==null)
         throw new ArgumentNullException("edges");
     this.enumerator = edges.GetEnumerator();
 }
 public void MeasurePath(IEdgeEnumerable edges)
 {
     this.Clear();
     int num = 0;
     bool flag = true;
     IEdgeEnumerator enumerator = edges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         VertexIntDictionary dictionary2;
         IVertex vertex2;
         IEdge edge = enumerator.get_Current();
         if (flag)
         {
             VertexIntDictionary dictionary;
             IVertex vertex;
             (dictionary = this.passCounts).set_Item(vertex = edge.get_Source(), dictionary.get_Item(vertex) + 1);
             flag = false;
         }
         if (this.passCounts.get_Item(edge.get_Target()) == 0)
         {
             num++;
         }
         (dictionary2 = this.passCounts).set_Item(vertex2 = edge.get_Target(), dictionary2.get_Item(vertex2) + 1);
     }
     if (this.graph.get_VerticesEmpty())
     {
         this.coverage = 0.0;
     }
     else
     {
         this.coverage = ((double) num) / ((double) this.graph.get_VerticesCount());
     }
 }
        private void VisitEdges(IEdgeEnumerable outEdges, bool forward)
        {
            IVertex target=null;
            foreach (IEdge e in outEdges)
            {
                OnExamineEdge(e);

                if (forward)
                    target = e.Target;
                else
                    target = e.Source;

                GraphColor vc = Colors[target];
                GraphColor ec = EdgeColors[e];

                EdgeColors[e] = GraphColor.Black;
                if (vc == GraphColor.White) // tree edge
                {
                    OnTreeEdge(e);
                    Visit(target);
                }
                else if (vc == GraphColor.Gray && ec == GraphColor.White)
                {
                    OnBackEdge(e);
                }

            }
        }
Ejemplo n.º 27
0
 /// <summary>
 /// Adds the elements of another EdgeCollection to the end of this EdgeCollection.
 /// </summary>
 /// <param name="items">
 /// The EdgeCollection whose elements are to be added to the end of this EdgeCollection.
 /// </param>
 public void AddRange(IEdgeEnumerable items)
 {
     foreach (IEdge item in items)
     {
         this.List.Add(item);
     }
 }
Ejemplo n.º 28
0
 /// <summary>
 /// Initializes a new instance of the EdgeCollection class, containing elements
 /// copied from another instance of EdgeCollection
 /// </summary>
 /// <param name="items">
 /// The EdgeCollection whose elements are to be added to the new EdgeCollection.
 /// </param>
 public EdgeCollection(IEdgeEnumerable items)
 {
     this.AddRange(items);
 }
Ejemplo n.º 29
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="edges"></param>
		/// <param name="count"></param>
		/// <param name="rnd"></param>
		/// <returns></returns>
		public static IEdge Edge(IEdgeEnumerable edges, int count, Random rnd)
		{
			if (edges == null)
				throw new ArgumentNullException("edges");
			if (rnd == null)
				throw new ArgumentNullException("random generator");
			if (count == 0)
				throw new ArgumentException("edges is empty");

			int i = rnd.Next(count);
			foreach(IEdge e in edges)
			{
				if (i==0)
					return e;
				else
					--i;
			}
			
			// failed
			throw new ArgumentOutOfRangeException("count");		
		}
 private void VisitEdges(IEdgeEnumerable outEdges, bool forward)
 {
     IVertex u = null;
     IEdgeEnumerator enumerator = outEdges.GetEnumerator();
     while (enumerator.MoveNext())
     {
         IEdge e = enumerator.get_Current();
         this.OnExamineEdge(e);
         if (forward)
         {
             u = e.get_Target();
         }
         else
         {
             u = e.get_Source();
         }
         GraphColor color = this.Colors.get_Item(u);
         GraphColor color2 = this.EdgeColors.get_Item(e);
         this.EdgeColors.set_Item(e, 1);
         if (color == null)
         {
             this.OnTreeEdge(e);
             this.Visit(u);
         }
         else if ((color == 2) && (color2 == null))
         {
             this.OnBackEdge(e);
         }
     }
 }
Ejemplo n.º 31
0
 public ReversedEdgeEnumerable(IEdgeEnumerable edges)
 {
     this.edges = edges;
 }
 public ReversedEdgeEnumerable(IEdgeEnumerable edges)
 {
     this.edges = edges;
 }
Ejemplo n.º 33
0
        /// <summary>
        /// Returns the last edge of the edge collection
        /// </summary>
        /// <param name="edges">edge collection</param>
        /// <returns>last edge if any, otherwise a null reference</returns>
        public static IEdge LastEdge(IEdgeEnumerable edges)
        {
            if (edges==null)
                throw new ArgumentNullException("edges");
            IEdgeEnumerator en = edges.GetEnumerator();
            IEdge current = null;
            while(en.MoveNext())
            {
                current = en.Current;
            }

            return current;
        }
 public TargetVertexEnumerable(IEdgeEnumerable edges)
 {
     if (edges==null)
         throw new ArgumentNullException("edges");
     this.edges = edges;
 }
        internal void WriteEdges(EdgeColorDictionary edgeColors,
            IEdgeEnumerable edges)
        {
            foreach(IEdge e in edges)
            {
                if (edgeColors[e]!=GraphColor.White)
                    continue;

                Output.Write("{0} -> {1} [",
                    e.Source.ID,
                    e.Target.ID
                    );

                OnWriteEdge(e);
                OnFormatEdge(EdgeFormat,e);
                Output.WriteLine("];");

                edgeColors[e]=GraphColor.Black;
            }
        }
Ejemplo n.º 36
0
 /// <summary>
 /// Initializes a new instance of the EdgeCollection class, containing elements
 /// copied from another instance of EdgeCollection
 /// </summary>
 /// <param name="items">
 /// The EdgeCollection whose elements are to be added to the new EdgeCollection.
 /// </param>
 public EdgeCollection(IEdgeEnumerable items)
 {
     this.AddRange(items);
 }
Ejemplo n.º 37
0
		internal IEdge NextState(
			int edgeCount,
			IEdgeEnumerable edges
			)
		{
            if (edgeCount == 0)
                return null;

            double r = this.rnd.NextDouble();
			int nr = (int)Math.Floor(edgeCount * r);
			if (nr==edgeCount)
				--nr;
				
			int i=0;
			foreach(IEdge e in edges)
			{
				if (i==nr)
					return e;
				++i;
			}				
			throw new InvalidOperationException("This is a bug");
		}