use explicit data types

This commit is contained in:
Dennis Luxen 2013-06-24 17:02:28 -04:00
parent c75ae957f1
commit fdda21b114

View File

@ -21,18 +21,20 @@ or see http://www.gnu.org/licenses/agpl.txt.
#ifndef DYNAMICGRAPH_H_INCLUDED #ifndef DYNAMICGRAPH_H_INCLUDED
#define DYNAMICGRAPH_H_INCLUDED #define DYNAMICGRAPH_H_INCLUDED
#include <vector> #include "../DataStructures/DeallocatingVector.h"
#include <boost/integer.hpp>
#include <algorithm> #include <algorithm>
#include <limits> #include <limits>
#include <vector>
#include "../DataStructures/DeallocatingVector.h"
template< typename EdgeDataT> template< typename EdgeDataT>
class DynamicGraph { class DynamicGraph {
public: public:
typedef EdgeDataT EdgeData; typedef EdgeDataT EdgeData;
typedef unsigned NodeIterator; typedef uint32_t NodeIterator;
typedef unsigned EdgeIterator; typedef uint32_t EdgeIterator;
class InputEdge { class InputEdge {
public: public:
@ -47,15 +49,16 @@ class DynamicGraph {
}; };
//Constructs an empty graph with a given number of nodes. //Constructs an empty graph with a given number of nodes.
DynamicGraph( int nodes ) : m_numNodes(nodes), m_numEdges(0) { DynamicGraph( int32_t nodes ) : m_numNodes(nodes), m_numEdges(0) {
m_nodes.reserve( m_numNodes ); m_nodes.reserve( m_numNodes );
m_nodes.resize( m_numNodes ); m_nodes.resize( m_numNodes );
m_edges.reserve( m_numNodes * 1.1 ); m_edges.reserve( m_numNodes * 1.1 );
m_edges.resize( m_numNodes ); m_edges.resize( m_numNodes );
} }
template<class ContainerT> template<class ContainerT>
DynamicGraph( const int nodes, const ContainerT &graph ) { DynamicGraph( const int32_t 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 +1); m_nodes.reserve( m_numNodes +1);
@ -90,15 +93,15 @@ class DynamicGraph {
~DynamicGraph(){ } ~DynamicGraph(){ }
unsigned GetNumberOfNodes() const { uint32_t GetNumberOfNodes() const {
return m_numNodes; return m_numNodes;
} }
unsigned GetNumberOfEdges() const { uint32_t GetNumberOfEdges() const {
return m_numEdges; return m_numEdges;
} }
unsigned GetOutDegree( const NodeIterator n ) const { uint32_t GetOutDegree( const NodeIterator n ) const {
return m_nodes[n].edges; return m_nodes[n].edges;
} }
@ -133,7 +136,7 @@ class DynamicGraph {
m_edges[node.firstEdge] = m_edges[node.firstEdge + node.edges]; m_edges[node.firstEdge] = m_edges[node.firstEdge + node.edges];
} else { } else {
EdgeIterator newFirstEdge = ( EdgeIterator ) m_edges.size(); EdgeIterator newFirstEdge = ( EdgeIterator ) m_edges.size();
unsigned newSize = node.edges * 1.1 + 2; uint32_t newSize = node.edges * 1.1 + 2;
EdgeIterator requiredCapacity = newSize + m_edges.size(); EdgeIterator requiredCapacity = newSize + m_edges.size();
EdgeIterator oldCapacity = m_edges.capacity(); EdgeIterator oldCapacity = m_edges.capacity();
if ( requiredCapacity >= oldCapacity ) { if ( requiredCapacity >= oldCapacity ) {
@ -162,15 +165,15 @@ class DynamicGraph {
Node &node = m_nodes[source]; Node &node = m_nodes[source];
--m_numEdges; --m_numEdges;
--node.edges; --node.edges;
const unsigned last = node.firstEdge + node.edges; const uint32_t last = node.firstEdge + node.edges;
//swap with last edge //swap with last edge
m_edges[e] = m_edges[last]; m_edges[e] = m_edges[last];
makeDummy( last ); makeDummy( last );
} }
//removes all edges (source,target) //removes all edges (source,target)
int DeleteEdgesTo( const NodeIterator source, const NodeIterator target ) { int32_t DeleteEdgesTo( const NodeIterator source, const NodeIterator target ) {
int deleted = 0; int32_t deleted = 0;
for ( EdgeIterator i = BeginEdges( source ), iend = EndEdges( source ); i < iend - deleted; ++i ) { for ( EdgeIterator i = BeginEdges( source ), iend = EndEdges( source ); i < iend - deleted; ++i ) {
if ( m_edges[i].target == target ) { if ( m_edges[i].target == target ) {
do { do {
@ -212,7 +215,7 @@ class DynamicGraph {
//index of the first edge //index of the first edge
EdgeIterator firstEdge; EdgeIterator firstEdge;
//amount of edges //amount of edges
unsigned edges; uint32_t edges;
}; };
struct Edge { struct Edge {