do not seek in temporary storage
This commit is contained in:
		
							parent
							
								
									c8f7e6331b
								
							
						
					
					
						commit
						48355447f9
					
				@ -54,10 +54,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
class Contractor {
 | 
					class Contractor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    struct _ContractorEdgeData {
 | 
					    struct ContractorEdgeData {
 | 
				
			||||||
        _ContractorEdgeData() :
 | 
					        ContractorEdgeData() :
 | 
				
			||||||
            distance(0), id(0), originalEdges(0), shortcut(0), forward(0), backward(0), originalViaNodeID(false) {}
 | 
					            distance(0), id(0), originalEdges(0), shortcut(0), forward(0), backward(0), originalViaNodeID(false) {}
 | 
				
			||||||
        _ContractorEdgeData( unsigned _distance, unsigned _originalEdges, unsigned _id, bool _shortcut, bool _forward, bool _backward) :
 | 
					        ContractorEdgeData( unsigned _distance, unsigned _originalEdges, unsigned _id, bool _shortcut, bool _forward, bool _backward) :
 | 
				
			||||||
            distance(_distance), id(_id), originalEdges(std::min((unsigned)1<<28, _originalEdges) ), shortcut(_shortcut), forward(_forward), backward(_backward), originalViaNodeID(false) {}
 | 
					            distance(_distance), id(_id), originalEdges(std::min((unsigned)1<<28, _originalEdges) ), shortcut(_shortcut), forward(_forward), backward(_backward), originalViaNodeID(false) {}
 | 
				
			||||||
        unsigned distance;
 | 
					        unsigned distance;
 | 
				
			||||||
        unsigned id;
 | 
					        unsigned id;
 | 
				
			||||||
@ -75,7 +75,7 @@ private:
 | 
				
			|||||||
        _HeapData( short h, bool t ) : hop(h), target(t) {}
 | 
					        _HeapData( short h, bool t ) : hop(h), target(t) {}
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    typedef DynamicGraph< _ContractorEdgeData > _DynamicGraph;
 | 
					    typedef DynamicGraph< ContractorEdgeData > _DynamicGraph;
 | 
				
			||||||
    //    typedef BinaryHeap< NodeID, NodeID, int, _HeapData, ArrayStorage<NodeID, NodeID> > _Heap;
 | 
					    //    typedef BinaryHeap< NodeID, NodeID, int, _HeapData, ArrayStorage<NodeID, NodeID> > _Heap;
 | 
				
			||||||
    typedef BinaryHeap< NodeID, NodeID, int, _HeapData, XORFastHashStorage<NodeID, NodeID> > _Heap;
 | 
					    typedef BinaryHeap< NodeID, NodeID, int, _HeapData, XORFastHashStorage<NodeID, NodeID> > _Heap;
 | 
				
			||||||
    typedef _DynamicGraph::InputEdge _ContractorEdge;
 | 
					    typedef _DynamicGraph::InputEdge _ContractorEdge;
 | 
				
			||||||
@ -118,6 +118,7 @@ public:
 | 
				
			|||||||
    Contractor( int nodes, ContainerT& inputEdges) {
 | 
					    Contractor( int nodes, ContainerT& inputEdges) {
 | 
				
			||||||
        std::vector< _ContractorEdge > edges;
 | 
					        std::vector< _ContractorEdge > edges;
 | 
				
			||||||
        edges.reserve(inputEdges.size()*2);
 | 
					        edges.reserve(inputEdges.size()*2);
 | 
				
			||||||
 | 
					        temp_edge_counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        typename ContainerT::deallocation_iterator diter = inputEdges.dbegin();
 | 
					        typename ContainerT::deallocation_iterator diter = inputEdges.dbegin();
 | 
				
			||||||
        typename ContainerT::deallocation_iterator dend  = inputEdges.dend();
 | 
					        typename ContainerT::deallocation_iterator dend  = inputEdges.dend();
 | 
				
			||||||
@ -126,7 +127,7 @@ public:
 | 
				
			|||||||
        while(diter!=dend) {
 | 
					        while(diter!=dend) {
 | 
				
			||||||
            newEdge.source = diter->source();
 | 
					            newEdge.source = diter->source();
 | 
				
			||||||
            newEdge.target = diter->target();
 | 
					            newEdge.target = diter->target();
 | 
				
			||||||
            newEdge.data = _ContractorEdgeData( (std::max)((int)diter->weight(), 1 ),  1,  diter->id(),  false,  diter->isForward(),  diter->isBackward());
 | 
					            newEdge.data = ContractorEdgeData( (std::max)((int)diter->weight(), 1 ),  1,  diter->id(),  false,  diter->isForward(),  diter->isBackward());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BOOST_ASSERT_MSG( newEdge.data.distance > 0, "edge distance < 1" );
 | 
					            BOOST_ASSERT_MSG( newEdge.data.distance > 0, "edge distance < 1" );
 | 
				
			||||||
#ifndef NDEBUG
 | 
					#ifndef NDEBUG
 | 
				
			||||||
@ -195,6 +196,7 @@ public:
 | 
				
			|||||||
        _graph = boost::make_shared<_DynamicGraph>( nodes, edges );
 | 
					        _graph = boost::make_shared<_DynamicGraph>( nodes, edges );
 | 
				
			||||||
        edges.clear();
 | 
					        edges.clear();
 | 
				
			||||||
        std::vector<_ContractorEdge>().swap(edges);
 | 
					        std::vector<_ContractorEdge>().swap(edges);
 | 
				
			||||||
 | 
					        BOOST_ASSERT( 0 == edges.capacity() );
 | 
				
			||||||
        //        unsigned maxdegree = 0;
 | 
					        //        unsigned maxdegree = 0;
 | 
				
			||||||
        //        NodeID highestNode = 0;
 | 
					        //        NodeID highestNode = 0;
 | 
				
			||||||
        //
 | 
					        //
 | 
				
			||||||
@ -214,14 +216,14 @@ public:
 | 
				
			|||||||
        //Create temporary file
 | 
					        //Create temporary file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //        GetTemporaryFileName(temporaryEdgeStorageFilename);
 | 
					        //        GetTemporaryFileName(temporaryEdgeStorageFilename);
 | 
				
			||||||
        temporaryStorageSlotID = TemporaryStorage::GetInstance().AllocateSlot();
 | 
					        edge_storage_slot = TemporaryStorage::GetInstance().AllocateSlot();
 | 
				
			||||||
        std::cout << "contractor finished initalization" << std::endl;
 | 
					        std::cout << "contractor finished initalization" << std::endl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ~Contractor() {
 | 
					    ~Contractor() {
 | 
				
			||||||
        //Delete temporary file
 | 
					        //Delete temporary file
 | 
				
			||||||
        //        remove(temporaryEdgeStorageFilename.c_str());
 | 
					        //        remove(temporaryEdgeStorageFilename.c_str());
 | 
				
			||||||
        TemporaryStorage::GetInstance().DeallocateSlot(temporaryStorageSlotID);
 | 
					        TemporaryStorage::GetInstance().DeallocateSlot(edge_storage_slot);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Run() {
 | 
					    void Run() {
 | 
				
			||||||
@ -264,11 +266,11 @@ public:
 | 
				
			|||||||
                std::cout << " [flush " << numberOfContractedNodes << " nodes] " << std::flush;
 | 
					                std::cout << " [flush " << numberOfContractedNodes << " nodes] " << std::flush;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //Delete old heap data to free memory that we need for the coming operations
 | 
					                //Delete old heap data to free memory that we need for the coming operations
 | 
				
			||||||
                BOOST_FOREACH(_ThreadData * data, threadData)
 | 
					                BOOST_FOREACH(_ThreadData * data, threadData) {
 | 
				
			||||||
                	delete data;
 | 
					                	delete data;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                threadData.clear();
 | 
					                threadData.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
                //Create new priority array
 | 
					                //Create new priority array
 | 
				
			||||||
                std::vector<float> newNodePriority(remainingNodes.size());
 | 
					                std::vector<float> newNodePriority(remainingNodes.size());
 | 
				
			||||||
                //this map gives the old IDs from the new ones, necessary to get a consistent graph at the end of contraction
 | 
					                //this map gives the old IDs from the new ones, necessary to get a consistent graph at the end of contraction
 | 
				
			||||||
@ -285,12 +287,6 @@ public:
 | 
				
			|||||||
                    remainingNodes[newNodeID].id = newNodeID;
 | 
					                    remainingNodes[newNodeID].id = newNodeID;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                TemporaryStorage & tempStorage = TemporaryStorage::GetInstance();
 | 
					                TemporaryStorage & tempStorage = TemporaryStorage::GetInstance();
 | 
				
			||||||
                //Write dummy number of edges to temporary file
 | 
					 | 
				
			||||||
                //        		std::ofstream temporaryEdgeStorage(temporaryEdgeStorageFilename.c_str(), std::ios::binary);
 | 
					 | 
				
			||||||
                uint64_t initialFilePosition = tempStorage.Tell(temporaryStorageSlotID);
 | 
					 | 
				
			||||||
                unsigned numberOfTemporaryEdges = 0;
 | 
					 | 
				
			||||||
                tempStorage.WriteToSlot(temporaryStorageSlotID, (char*)&numberOfTemporaryEdges, sizeof(unsigned));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                //walk over all nodes
 | 
					                //walk over all nodes
 | 
				
			||||||
                for(unsigned i = 0; i < _graph->GetNumberOfNodes(); ++i) {
 | 
					                for(unsigned i = 0; i < _graph->GetNumberOfNodes(); ++i) {
 | 
				
			||||||
                    const NodeID start = i;
 | 
					                    const NodeID start = i;
 | 
				
			||||||
@ -299,10 +295,10 @@ public:
 | 
				
			|||||||
                        const NodeID target = _graph->GetTarget(currentEdge);
 | 
					                        const NodeID target = _graph->GetTarget(currentEdge);
 | 
				
			||||||
                        if(UINT_MAX == newNodeIDFromOldNodeIDMap[i] ){
 | 
					                        if(UINT_MAX == newNodeIDFromOldNodeIDMap[i] ){
 | 
				
			||||||
                            //Save edges of this node w/o renumbering.
 | 
					                            //Save edges of this node w/o renumbering.
 | 
				
			||||||
                            tempStorage.WriteToSlot(temporaryStorageSlotID, (char*)&start,  sizeof(NodeID));
 | 
					                            tempStorage.WriteToSlot(edge_storage_slot, (char*)&start,  sizeof(NodeID));
 | 
				
			||||||
                            tempStorage.WriteToSlot(temporaryStorageSlotID, (char*)&target, sizeof(NodeID));
 | 
					                            tempStorage.WriteToSlot(edge_storage_slot, (char*)&target, sizeof(NodeID));
 | 
				
			||||||
                            tempStorage.WriteToSlot(temporaryStorageSlotID, (char*)&data,   sizeof(_DynamicGraph::EdgeData));
 | 
					                            tempStorage.WriteToSlot(edge_storage_slot, (char*)&data,   sizeof(_DynamicGraph::EdgeData));
 | 
				
			||||||
                            ++numberOfTemporaryEdges;
 | 
					                            ++temp_edge_counter;
 | 
				
			||||||
                        } else {
 | 
					                        } else {
 | 
				
			||||||
                            //node is not yet contracted.
 | 
					                            //node is not yet contracted.
 | 
				
			||||||
                            //add (renumbered) outgoing edges to new DynamicGraph.
 | 
					                            //add (renumbered) outgoing edges to new DynamicGraph.
 | 
				
			||||||
@ -323,9 +319,6 @@ public:
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                //Note the number of temporarily stored edges
 | 
					 | 
				
			||||||
                tempStorage.Seek(temporaryStorageSlotID, initialFilePosition);
 | 
					 | 
				
			||||||
                tempStorage.WriteToSlot(temporaryStorageSlotID, (char*)&numberOfTemporaryEdges, sizeof(unsigned));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //Delete map from old NodeIDs to new ones.
 | 
					                //Delete map from old NodeIDs to new ones.
 | 
				
			||||||
                std::vector<NodeID>().swap(newNodeIDFromOldNodeIDMap);
 | 
					                std::vector<NodeID>().swap(newNodeIDFromOldNodeIDMap);
 | 
				
			||||||
@ -454,13 +447,13 @@ public:
 | 
				
			|||||||
        SimpleLogger().Write() << "Getting edges of minimized graph";
 | 
					        SimpleLogger().Write() << "Getting edges of minimized graph";
 | 
				
			||||||
        NodeID numberOfNodes = _graph->GetNumberOfNodes();
 | 
					        NodeID numberOfNodes = _graph->GetNumberOfNodes();
 | 
				
			||||||
        if(_graph->GetNumberOfNodes()) {
 | 
					        if(_graph->GetNumberOfNodes()) {
 | 
				
			||||||
 | 
					            Edge newEdge;
 | 
				
			||||||
            for ( NodeID node = 0; node < numberOfNodes; ++node ) {
 | 
					            for ( NodeID node = 0; node < numberOfNodes; ++node ) {
 | 
				
			||||||
                p.printStatus(node);
 | 
					                p.printStatus(node);
 | 
				
			||||||
                for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge < endEdges; ++edge ) {
 | 
					                for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge < endEdges; ++edge ) {
 | 
				
			||||||
                    const NodeID target = _graph->GetTarget( edge );
 | 
					                    const NodeID target = _graph->GetTarget( edge );
 | 
				
			||||||
                    const _DynamicGraph::EdgeData& data = _graph->GetEdgeData( edge );
 | 
					                    const _DynamicGraph::EdgeData& data = _graph->GetEdgeData( edge );
 | 
				
			||||||
                    Edge newEdge;
 | 
					                    if( !oldNodeIDFromNewNodeIDMap.empty() ) {
 | 
				
			||||||
                    if(0 != oldNodeIDFromNewNodeIDMap.size()) {
 | 
					 | 
				
			||||||
                        newEdge.source = oldNodeIDFromNewNodeIDMap[node];
 | 
					                        newEdge.source = oldNodeIDFromNewNodeIDMap[node];
 | 
				
			||||||
                        newEdge.target = oldNodeIDFromNewNodeIDMap[target];
 | 
					                        newEdge.target = oldNodeIDFromNewNodeIDMap[target];
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
@ -477,7 +470,10 @@ public:
 | 
				
			|||||||
                    );
 | 
					                    );
 | 
				
			||||||
                    newEdge.data.distance = data.distance;
 | 
					                    newEdge.data.distance = data.distance;
 | 
				
			||||||
                    newEdge.data.shortcut = data.shortcut;
 | 
					                    newEdge.data.shortcut = data.shortcut;
 | 
				
			||||||
                   if(!data.originalViaNodeID && oldNodeIDFromNewNodeIDMap.size()) {
 | 
					                    if(
 | 
				
			||||||
 | 
					                        !data.originalViaNodeID            &&
 | 
				
			||||||
 | 
					                        !oldNodeIDFromNewNodeIDMap.empty()
 | 
				
			||||||
 | 
					                    ) {
 | 
				
			||||||
                        newEdge.data.id = oldNodeIDFromNewNodeIDMap[data.id];
 | 
					                        newEdge.data.id = oldNodeIDFromNewNodeIDMap[data.id];
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
                        newEdge.data.id = data.id;
 | 
					                        newEdge.data.id = data.id;
 | 
				
			||||||
@ -494,31 +490,29 @@ public:
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        _graph.reset();
 | 
					        _graph.reset();
 | 
				
			||||||
        std::vector<NodeID>().swap(oldNodeIDFromNewNodeIDMap);
 | 
					        std::vector<NodeID>().swap(oldNodeIDFromNewNodeIDMap);
 | 
				
			||||||
 | 
					        BOOST_ASSERT( 0 == oldNodeIDFromNewNodeIDMap.capacity() );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TemporaryStorage & tempStorage = TemporaryStorage::GetInstance();
 | 
					        TemporaryStorage & tempStorage = TemporaryStorage::GetInstance();
 | 
				
			||||||
        //Also get the edges from temporary storage
 | 
					 | 
				
			||||||
        unsigned numberOfTemporaryEdges = 0;
 | 
					 | 
				
			||||||
        tempStorage.ReadFromSlot(temporaryStorageSlotID, (char*)&numberOfTemporaryEdges, sizeof(unsigned));
 | 
					 | 
				
			||||||
        //loads edges of graph before renumbering, no need for further numbering action.
 | 
					        //loads edges of graph before renumbering, no need for further numbering action.
 | 
				
			||||||
        NodeID start;
 | 
					        NodeID start;
 | 
				
			||||||
        NodeID target;
 | 
					        NodeID target;
 | 
				
			||||||
        //edges.reserve(edges.size()+numberOfTemporaryEdges);
 | 
					 | 
				
			||||||
        _DynamicGraph::EdgeData data;
 | 
					        _DynamicGraph::EdgeData data;
 | 
				
			||||||
        for(unsigned i = 0; i < numberOfTemporaryEdges; ++i) {
 | 
					
 | 
				
			||||||
            tempStorage.ReadFromSlot(temporaryStorageSlotID, (char*)&start,  sizeof(NodeID));
 | 
					        Edge restored_edge;
 | 
				
			||||||
            tempStorage.ReadFromSlot(temporaryStorageSlotID, (char*)&target, sizeof(NodeID));
 | 
					        for(unsigned i = 0; i < temp_edge_counter; ++i) {
 | 
				
			||||||
            tempStorage.ReadFromSlot(temporaryStorageSlotID, (char*)&data,   sizeof(_DynamicGraph::EdgeData));
 | 
					            tempStorage.ReadFromSlot(edge_storage_slot, (char*)&start,  sizeof(NodeID));
 | 
				
			||||||
            Edge newEdge;
 | 
					            tempStorage.ReadFromSlot(edge_storage_slot, (char*)&target, sizeof(NodeID));
 | 
				
			||||||
            newEdge.source =  start;
 | 
					            tempStorage.ReadFromSlot(edge_storage_slot, (char*)&data,   sizeof(_DynamicGraph::EdgeData));
 | 
				
			||||||
            newEdge.target = target;
 | 
					            restored_edge.source =  start;
 | 
				
			||||||
            newEdge.data.distance = data.distance;
 | 
					            restored_edge.target = target;
 | 
				
			||||||
            newEdge.data.shortcut = data.shortcut;
 | 
					            restored_edge.data.distance = data.distance;
 | 
				
			||||||
            newEdge.data.id = data.id;
 | 
					            restored_edge.data.shortcut = data.shortcut;
 | 
				
			||||||
            newEdge.data.forward = data.forward;
 | 
					            restored_edge.data.id = data.id;
 | 
				
			||||||
            newEdge.data.backward = data.backward;
 | 
					            restored_edge.data.forward = data.forward;
 | 
				
			||||||
            edges.push_back( newEdge );
 | 
					            restored_edge.data.backward = data.backward;
 | 
				
			||||||
 | 
					            edges.push_back( restored_edge );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        tempStorage.DeallocateSlot(temporaryStorageSlotID);
 | 
					        tempStorage.DeallocateSlot(edge_storage_slot);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@ -548,7 +542,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            //iterate over all edges of node
 | 
					            //iterate over all edges of node
 | 
				
			||||||
            for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge != endEdges; ++edge ) {
 | 
					            for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge != endEdges; ++edge ) {
 | 
				
			||||||
                const _ContractorEdgeData& data = _graph->GetEdgeData( edge );
 | 
					                const ContractorEdgeData& data = _graph->GetEdgeData( edge );
 | 
				
			||||||
                if ( !data.forward ){
 | 
					                if ( !data.forward ){
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -594,7 +588,7 @@ private:
 | 
				
			|||||||
        std::vector< _ContractorEdge >& insertedEdges = data->insertedEdges;
 | 
					        std::vector< _ContractorEdge >& insertedEdges = data->insertedEdges;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for ( _DynamicGraph::EdgeIterator inEdge = _graph->BeginEdges( node ), endInEdges = _graph->EndEdges( node ); inEdge != endInEdges; ++inEdge ) {
 | 
					        for ( _DynamicGraph::EdgeIterator inEdge = _graph->BeginEdges( node ), endInEdges = _graph->EndEdges( node ); inEdge != endInEdges; ++inEdge ) {
 | 
				
			||||||
            const _ContractorEdgeData& inData = _graph->GetEdgeData( inEdge );
 | 
					            const ContractorEdgeData& inData = _graph->GetEdgeData( inEdge );
 | 
				
			||||||
            const NodeID source = _graph->GetTarget( inEdge );
 | 
					            const NodeID source = _graph->GetTarget( inEdge );
 | 
				
			||||||
            if ( Simulate ) {
 | 
					            if ( Simulate ) {
 | 
				
			||||||
                assert( stats != NULL );
 | 
					                assert( stats != NULL );
 | 
				
			||||||
@ -610,7 +604,7 @@ private:
 | 
				
			|||||||
            unsigned numTargets = 0;
 | 
					            unsigned numTargets = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for ( _DynamicGraph::EdgeIterator outEdge = _graph->BeginEdges( node ), endOutEdges = _graph->EndEdges( node ); outEdge != endOutEdges; ++outEdge ) {
 | 
					            for ( _DynamicGraph::EdgeIterator outEdge = _graph->BeginEdges( node ), endOutEdges = _graph->EndEdges( node ); outEdge != endOutEdges; ++outEdge ) {
 | 
				
			||||||
                const _ContractorEdgeData& outData = _graph->GetEdgeData( outEdge );
 | 
					                const ContractorEdgeData& outData = _graph->GetEdgeData( outEdge );
 | 
				
			||||||
                if ( !outData.forward ) {
 | 
					                if ( !outData.forward ) {
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -629,7 +623,7 @@ private:
 | 
				
			|||||||
                _Dijkstra( maxDistance, numTargets, 2000, data, node );
 | 
					                _Dijkstra( maxDistance, numTargets, 2000, data, node );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            for ( _DynamicGraph::EdgeIterator outEdge = _graph->BeginEdges( node ), endOutEdges = _graph->EndEdges( node ); outEdge != endOutEdges; ++outEdge ) {
 | 
					            for ( _DynamicGraph::EdgeIterator outEdge = _graph->BeginEdges( node ), endOutEdges = _graph->EndEdges( node ); outEdge != endOutEdges; ++outEdge ) {
 | 
				
			||||||
                const _ContractorEdgeData& outData = _graph->GetEdgeData( outEdge );
 | 
					                const ContractorEdgeData& outData = _graph->GetEdgeData( outEdge );
 | 
				
			||||||
                if ( !outData.forward ) {
 | 
					                if ( !outData.forward ) {
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -645,7 +639,7 @@ private:
 | 
				
			|||||||
                        _ContractorEdge newEdge;
 | 
					                        _ContractorEdge newEdge;
 | 
				
			||||||
                        newEdge.source = source;
 | 
					                        newEdge.source = source;
 | 
				
			||||||
                        newEdge.target = target;
 | 
					                        newEdge.target = target;
 | 
				
			||||||
                        newEdge.data = _ContractorEdgeData( pathDistance, outData.originalEdges + inData.originalEdges, node/*, 0, inData.turnInstruction*/, true, true, false);;
 | 
					                        newEdge.data = ContractorEdgeData( pathDistance, outData.originalEdges + inData.originalEdges, node/*, 0, inData.turnInstruction*/, true, true, false);;
 | 
				
			||||||
                        insertedEdges.push_back( newEdge );
 | 
					                        insertedEdges.push_back( newEdge );
 | 
				
			||||||
                        std::swap( newEdge.source, newEdge.target );
 | 
					                        std::swap( newEdge.source, newEdge.target );
 | 
				
			||||||
                        newEdge.data.forward = false;
 | 
					                        newEdge.data.forward = false;
 | 
				
			||||||
@ -784,7 +778,8 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    boost::shared_ptr<_DynamicGraph> _graph;
 | 
					    boost::shared_ptr<_DynamicGraph> _graph;
 | 
				
			||||||
    std::vector<_DynamicGraph::InputEdge> contractedEdges;
 | 
					    std::vector<_DynamicGraph::InputEdge> contractedEdges;
 | 
				
			||||||
    unsigned temporaryStorageSlotID;
 | 
					    unsigned edge_storage_slot;
 | 
				
			||||||
 | 
					    uint64_t temp_edge_counter;
 | 
				
			||||||
    std::vector<NodeID> oldNodeIDFromNewNodeIDMap;
 | 
					    std::vector<NodeID> oldNodeIDFromNewNodeIDMap;
 | 
				
			||||||
    XORFastHash fastHash;
 | 
					    XORFastHash fastHash;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user