add function to set edge target
This commit is contained in:
parent
cef01f5dbc
commit
e0dd4848b0
@ -41,8 +41,8 @@ template< typename EdgeDataT>
|
|||||||
class DynamicGraph {
|
class DynamicGraph {
|
||||||
public:
|
public:
|
||||||
typedef EdgeDataT EdgeData;
|
typedef EdgeDataT EdgeData;
|
||||||
typedef uint32_t NodeIterator;
|
typedef unsigned NodeIterator;
|
||||||
typedef uint32_t EdgeIterator;
|
typedef unsigned EdgeIterator;
|
||||||
|
|
||||||
class InputEdge {
|
class InputEdge {
|
||||||
public:
|
public:
|
||||||
@ -101,15 +101,15 @@ class DynamicGraph {
|
|||||||
|
|
||||||
~DynamicGraph(){ }
|
~DynamicGraph(){ }
|
||||||
|
|
||||||
uint32_t GetNumberOfNodes() const {
|
unsigned GetNumberOfNodes() const {
|
||||||
return m_numNodes;
|
return m_numNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t GetNumberOfEdges() const {
|
unsigned GetNumberOfEdges() const {
|
||||||
return m_numEdges;
|
return m_numEdges;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t GetOutDegree( const NodeIterator n ) const {
|
unsigned GetOutDegree( const NodeIterator n ) const {
|
||||||
return m_nodes[n].edges;
|
return m_nodes[n].edges;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,6 +117,10 @@ class DynamicGraph {
|
|||||||
return NodeIterator( m_edges[e].target );
|
return NodeIterator( m_edges[e].target );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetTarget( const EdgeIterator e, const NodeIterator n ) {
|
||||||
|
m_edges[e].target = n;
|
||||||
|
}
|
||||||
|
|
||||||
EdgeDataT &GetEdgeData( const EdgeIterator e ) {
|
EdgeDataT &GetEdgeData( const EdgeIterator e ) {
|
||||||
return m_edges[e].data;
|
return m_edges[e].data;
|
||||||
}
|
}
|
||||||
@ -143,7 +147,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();
|
||||||
uint32_t newSize = node.edges * 1.1 + 2;
|
unsigned 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 ) {
|
||||||
@ -170,9 +174,12 @@ class DynamicGraph {
|
|||||||
//removes an edge. Invalidates edge iterators for the source node
|
//removes an edge. Invalidates edge iterators for the source node
|
||||||
void DeleteEdge( const NodeIterator source, const EdgeIterator e ) {
|
void DeleteEdge( const NodeIterator source, const EdgeIterator e ) {
|
||||||
Node &node = m_nodes[source];
|
Node &node = m_nodes[source];
|
||||||
|
#pragma omp atomic
|
||||||
--m_numEdges;
|
--m_numEdges;
|
||||||
--node.edges;
|
--node.edges;
|
||||||
const uint32_t last = node.firstEdge + node.edges;
|
BOOST_ASSERT(UINT_MAX != node.edges);
|
||||||
|
const unsigned last = node.firstEdge + node.edges;
|
||||||
|
BOOST_ASSERT( UINT_MAX != last);
|
||||||
//swap with last edge
|
//swap with last edge
|
||||||
m_edges[e] = m_edges[last];
|
m_edges[e] = m_edges[last];
|
||||||
makeDummy( last );
|
makeDummy( last );
|
||||||
@ -222,7 +229,7 @@ class DynamicGraph {
|
|||||||
//index of the first edge
|
//index of the first edge
|
||||||
EdgeIterator firstEdge;
|
EdgeIterator firstEdge;
|
||||||
//amount of edges
|
//amount of edges
|
||||||
uint32_t edges;
|
unsigned edges;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Edge {
|
struct Edge {
|
||||||
|
Loading…
Reference in New Issue
Block a user