Externalized even more of the temporary data structures.
This commit is contained in:
parent
44af60563d
commit
8c2bd8bd88
@ -21,20 +21,23 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#ifndef CONTRACTOR_H_INCLUDED
|
#ifndef CONTRACTOR_H_INCLUDED
|
||||||
#define CONTRACTOR_H_INCLUDED
|
#define CONTRACTOR_H_INCLUDED
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <ctime>
|
||||||
|
#include <limits>
|
||||||
|
#include <queue>
|
||||||
|
#include <set>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <stxxl.h>
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
|
||||||
#include "../DataStructures/DynamicGraph.h"
|
#include "../DataStructures/DynamicGraph.h"
|
||||||
#include "../DataStructures/Percent.h"
|
#include "../DataStructures/Percent.h"
|
||||||
#include "../DataStructures/BinaryHeap.h"
|
#include "../DataStructures/BinaryHeap.h"
|
||||||
#include "../Util/OpenMPReplacement.h"
|
#include "../Util/OpenMPReplacement.h"
|
||||||
#include "../Util/StringUtil.h"
|
#include "../Util/StringUtil.h"
|
||||||
|
|
||||||
#include <ctime>
|
|
||||||
#include <vector>
|
|
||||||
#include <queue>
|
|
||||||
#include <set>
|
|
||||||
#include <stack>
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
class Contractor {
|
class Contractor {
|
||||||
|
|
||||||
@ -98,7 +101,7 @@ public:
|
|||||||
|
|
||||||
template<class ContainerT >
|
template<class ContainerT >
|
||||||
Contractor( int nodes, ContainerT& inputEdges) {
|
Contractor( int nodes, ContainerT& inputEdges) {
|
||||||
std::vector< _ImportEdge > edges;
|
stxxl::vector< _ImportEdge > edges;
|
||||||
edges.reserve( 2 * inputEdges.size() );
|
edges.reserve( 2 * inputEdges.size() );
|
||||||
BOOST_FOREACH(typename ContainerT::value_type & currentEdge, inputEdges) {
|
BOOST_FOREACH(typename ContainerT::value_type & currentEdge, inputEdges) {
|
||||||
_ImportEdge edge;
|
_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 );
|
edges.resize( edge );
|
||||||
std::vector<_ImportEdge>(edges).swap(edges);
|
|
||||||
|
|
||||||
_graph.reset( new _DynamicGraph( nodes, edges ) );
|
_graph.reset( new _DynamicGraph( nodes, edges ) );
|
||||||
std::vector< _ImportEdge >().swap( edges );
|
INFO("Finished building dynamic graph");
|
||||||
|
edges.clear();
|
||||||
// unsigned maxdegree = 0;
|
// unsigned maxdegree = 0;
|
||||||
// NodeID highestNode = 0;
|
// NodeID highestNode = 0;
|
||||||
//
|
//
|
||||||
|
@ -52,12 +52,15 @@ class DynamicGraph {
|
|||||||
m_edges.reserve( m_numNodes * 1.1 );
|
m_edges.reserve( m_numNodes * 1.1 );
|
||||||
m_edges.resize( m_numNodes );
|
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_numNodes = nodes;
|
||||||
m_numEdges = ( EdgeIterator ) graph.size();
|
m_numEdges = ( EdgeIterator ) graph.size();
|
||||||
m_nodes.reserve( m_numNodes );
|
m_nodes.reserve( m_numNodes );
|
||||||
|
INFO("reserved nodes");
|
||||||
m_nodes.resize( m_numNodes );
|
m_nodes.resize( m_numNodes );
|
||||||
|
INFO("resized nodes");
|
||||||
EdgeIterator edge = 0;
|
EdgeIterator edge = 0;
|
||||||
EdgeIterator position = 0;
|
EdgeIterator position = 0;
|
||||||
for ( NodeIterator node = 0; node < m_numNodes; ++node ) {
|
for ( NodeIterator node = 0; node < m_numNodes; ++node ) {
|
||||||
@ -70,7 +73,9 @@ class DynamicGraph {
|
|||||||
position += m_nodes[node].edges;
|
position += m_nodes[node].edges;
|
||||||
}
|
}
|
||||||
m_edges.reserve( position * 1.1 );
|
m_edges.reserve( position * 1.1 );
|
||||||
|
INFO("reserced edges");
|
||||||
m_edges.resize( position );
|
m_edges.resize( position );
|
||||||
|
INFO("resized edges");
|
||||||
edge = 0;
|
edge = 0;
|
||||||
for ( NodeIterator node = 0; node < m_numNodes; ++node ) {
|
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 ) {
|
for ( EdgeIterator i = m_nodes[node].firstEdge, e = m_nodes[node].firstEdge + m_nodes[node].edges; i != e; ++i ) {
|
||||||
|
Loading…
Reference in New Issue
Block a user