コード例 #1
0
        protected override void DoRun()
        {
            this._weights = new float[this._sources.Length][];
            for (int index1 = 0; index1 < this._sources.Length; ++index1)
            {
                RouterPoint source = this._sources[index1];
                this._weights[index1] = new float[this._targets.Length];
                for (int index2 = 0; index2 < this._targets.Length; ++index2)
                {
                    RouterPoint target = this._targets[index2];
                    this._weights[index1][index2] = float.MaxValue;
                    if ((int)target.EdgeId == (int)source.EdgeId)
                    {
                        Path path = source.PathTo(this._routerDb, this._getFactor, target);
                        if (path != null)
                        {
                            this._weights[index1][index2] = path.Weight;
                        }
                    }
                }
            }
            int num1;

            for (int i = 0; i < this._sources.Length; i = num1 + 1)
            {
                Dykstra dykstra = new Dykstra(this._graph, (IEnumerable <Path>) this._sources[i].ToPaths(this._routerDb, this._getFactor, true), false);
                dykstra.WasFound = dykstra.WasFound + (Func <uint, float, bool>)((vertex, weight) => this.ForwardVertexFound(i, vertex, weight));
                dykstra.Run();
                num1 = i;
            }
            int num2;

            for (int i = 0; i < this._targets.Length; i = num2 + 1)
            {
                Dykstra dykstra = new Dykstra(this._graph, (IEnumerable <Path>) this._targets[i].ToPaths(this._routerDb, this._getFactor, false), true);
                dykstra.WasFound = dykstra.WasFound + (Func <uint, float, bool>)((vertex, weight) => this.BackwardVertexFound(i, vertex, weight));
                dykstra.Run();
                num2 = i;
            }
            this.HasSucceeded = true;
        }