private void OnTreeEdge(TEdge edge, bool reversed)
        {
            Debug.Assert(edge != null);

            TreeEdge?.Invoke(
                this,
                new UndirectedEdgeEventArgs <TVertex, TEdge>(edge, reversed));
        }
예제 #2
0
        /// <summary>
        /// Called on each <see cref="TreeEdge"/> event.
        /// </summary>
        /// <param name="edge">Concerned edge.</param>
        /// <param name="reversed">Indicates if the edge is reversed.</param>
        protected virtual void OnTreeEdge([NotNull] TEdge edge, bool reversed)
        {
            Debug.Assert(edge != null);

            TreeEdge?.Invoke(
                this,
                new UndirectedEdgeEventArgs <TVertex, TEdge>(edge, reversed));
        }
예제 #3
0
        /// <summary>
        /// Called on each <see cref="TreeEdge"/> event.
        /// </summary>
        /// <param name="edge">Concerned edge.</param>
        protected virtual void OnTreeEdge([NotNull] TEdge edge)
        {
            if (edge == null)
            {
                throw new ArgumentNullException(nameof(edge));
            }

            TreeEdge?.Invoke(edge);
        }
        /// <summary>
        /// Called on each <see cref="TreeEdge"/> event.
        /// </summary>
        /// <param name="edge">Concerned edge.</param>
        /// <param name="reversed">Indicates if the edge is reversed.</param>
        protected virtual void OnTreeEdge([NotNull] TEdge edge, bool reversed)
        {
            if (edge == null)
            {
                throw new ArgumentNullException(nameof(edge));
            }

            TreeEdge?.Invoke(
                this,
                new UndirectedEdgeEventArgs <TVertex, TEdge>(edge, reversed));
        }
        private void OnTreeEdge([NotNull] TEdge edge)
        {
            Debug.Assert(edge != null);

            TreeEdge?.Invoke(edge);
        }
예제 #6
0
    public void AddEdge(Object value, DecisionTree childNode)
    {
        TreeEdge edge = new TreeEdge(value, childNode);

        edges.Add(edge);
    }
예제 #7
0
파일: TreeBuilder.cs 프로젝트: amseet/Orion
        /// <summary>
        /// Executes the actual algorithm.
        /// </summary>
        protected override void DoRun(CancellationToken cancellationToken)
        {
            _edges     = new HashSet <uint>();
            _treeEdges = new List <TreeEdge>();

            _edgeVisitor.Visit += (path) =>
            {
                var e       = path.Edge;
                var weight2 = path.Weight;
                if (e == Constants.NO_EDGE)
                {
                    return(false);
                }

                var previousEdgeId = Constants.NO_EDGE;
                var weight1        = 0f;
                if (path.From != null)
                {
                    weight1 = path.From.Weight;
                    if (path.From.Edge > 0)
                    {
                        previousEdgeId = (uint)path.From.Edge - 1;
                    }
                    else
                    {
                        previousEdgeId = (uint)((-path.From.Edge) - 1);
                    }
                }

                uint edgeId;
                if (e > 0)
                {
                    edgeId = (uint)e - 1;
                }
                else
                {
                    edgeId = (uint)((-e) - 1);
                }
                var edge  = _graph.GetEdge(edgeId);
                var shape = _graph.GetShape(edge);
                if (e < 0)
                {
                    shape.Reverse();
                }

                var shapeArray = new float[shape.Count][];
                for (var i = 0; i < shapeArray.Length; i++)
                {
                    shapeArray[i]    = new float[2];
                    shapeArray[i][1] = shape[i].Latitude;
                    shapeArray[i][0] = shape[i].Longitude;
                }

                var treeEdge = new TreeEdge()
                {
                    EdgeId         = edgeId,
                    PreviousEdgeId = previousEdgeId,
                    Shape          = shapeArray,
                    Weight1        = weight1,
                    Weight2        = weight2
                };
                _treeEdges.Add(treeEdge);

                if (_max < weight2)
                {
                    _max = weight2;
                }

                return(false);
            };
            _edgeVisitor.Run(cancellationToken);

            _tree = new Tree()
            {
                Edges = _treeEdges.ToArray(),
                Max   = _max
            };

            this.HasSucceeded = true;
        }
예제 #8
0
 protected void OnTreeEdge(EdgeType edge)
 {
     TreeEdge?.Invoke(edge);
 }
예제 #9
0
        /// <summary>
        /// Called on each <see cref="TreeEdge"/> event.
        /// </summary>
        /// <param name="edge">Concerned edge.</param>
        protected virtual void OnTreeEdge([NotNull] TEdge edge)
        {
            Debug.Assert(edge != null);

            TreeEdge?.Invoke(edge);
        }
예제 #10
0
 /// <inheritdoc/>
 public void OnTreeEdge(TGraph g, TEdge e) => TreeEdge?.Invoke(g, e);