Externalized even more of the temporary data structures.

This commit is contained in:
DennisOSRM 2012-04-26 14:03:01 +02:00
parent 44af60563d
commit 8c2bd8bd88
2 changed files with 19 additions and 11 deletions

View File

@ -21,20 +21,23 @@ or see http://www.gnu.org/licenses/agpl.txt.
#ifndef CONTRACTOR_H_INCLUDED
#define CONTRACTOR_H_INCLUDED
#include <algorithm>
#include <ctime>
#include <limits>
#include <queue>
#include <set>
#include <vector>
#include <stxxl.h>
#include <boost/shared_ptr.hpp>
#include "../DataStructures/DynamicGraph.h"
#include "../DataStructures/Percent.h"
#include "../DataStructures/BinaryHeap.h"
#include "../Util/OpenMPReplacement.h"
#include "../Util/StringUtil.h"
#include <ctime>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <limits>
class Contractor {
@ -98,7 +101,7 @@ public:
template<class ContainerT >
Contractor( int nodes, ContainerT& inputEdges) {
std::vector< _ImportEdge > edges;
stxxl::vector< _ImportEdge > edges;
edges.reserve( 2 * inputEdges.size() );
BOOST_FOREACH(typename ContainerT::value_type & currentEdge, inputEdges) {
_ImportEdge edge;
@ -169,12 +172,12 @@ public:
}
}
}
std::cout << "ok" << "merged " << edges.size() - edge << " edges out of " << edges.size() << std::endl;
std::cout << "merged " << edges.size() - edge << " edges out of " << edges.size() << std::endl;
edges.resize( edge );
std::vector<_ImportEdge>(edges).swap(edges);
_graph.reset( new _DynamicGraph( nodes, edges ) );
std::vector< _ImportEdge >().swap( edges );
INFO("Finished building dynamic graph");
edges.clear();
// unsigned maxdegree = 0;
// NodeID highestNode = 0;
//

View File

@ -52,12 +52,15 @@ class DynamicGraph {
m_edges.reserve( m_numNodes * 1.1 );
m_edges.resize( m_numNodes );
}
DynamicGraph( int nodes, const std::vector< InputEdge > &graph )
template<class ContainerT>
DynamicGraph( int nodes, const ContainerT &graph )
{
m_numNodes = nodes;
m_numEdges = ( EdgeIterator ) graph.size();
m_nodes.reserve( m_numNodes );
INFO("reserved nodes");
m_nodes.resize( m_numNodes );
INFO("resized nodes");
EdgeIterator edge = 0;
EdgeIterator position = 0;
for ( NodeIterator node = 0; node < m_numNodes; ++node ) {
@ -70,7 +73,9 @@ class DynamicGraph {
position += m_nodes[node].edges;
}
m_edges.reserve( position * 1.1 );
INFO("reserced edges");
m_edges.resize( position );
INFO("resized edges");
edge = 0;
for ( NodeIterator node = 0; node < m_numNodes; ++node ) {
for ( EdgeIterator i = m_nodes[node].firstEdge, e = m_nodes[node].firstEdge + m_nodes[node].edges; i != e; ++i ) {