PeriDyno 1.0.0
Loading...
Searching...
No Matches
DirectedAcyclicGraph.h
Go to the documentation of this file.
1
16#pragma once
17#include "Object.h"
18
19#include <map>
20#include <list>
21#include <stack>
22#include <set>
23#include <vector>
24#include <queue>
25#include <unordered_set>
26
27namespace dyno {
33 {
34 public:
37
38 // Add an edge to DAG
39 void addEdge(ObjectId v, ObjectId w);
40
41 // Depth first traversal of the vertices
42 std::vector<ObjectId>& topologicalSort(ObjectId v);
43
44 // Depth first traversal of the vertices
45 std::vector<ObjectId>& topologicalSort();
46
47 size_t sizeOfVertex() const;
48
49 size_t OtherVerticesSize() { return OtherVertices.size(); }
50
51 std::set<ObjectId>& getOtherVertices() { return OtherVertices;}
52
53 std::set<ObjectId>& vertices();
54
55 std::map<ObjectId, std::unordered_set<ObjectId>>& edges();
56
57 std::map<ObjectId, std::unordered_set<ObjectId>>& reverseEdges();
58
60
62
63 void removeID(ObjectId v = -1, ObjectId w = -1);
64
65 private:
66 // Functions used by topologicalSort
67 void topologicalSortUtil(ObjectId v, std::map<ObjectId, bool>& visited, std::stack<ObjectId>& stack);
68 void topologicalSortUtil(ObjectId v, std::map<ObjectId, bool>& visited);
69
70 private:
71 std::vector<ObjectId> mOrderVertices;
72 std::set<ObjectId> mVertices;
73 std::map<ObjectId, std::unordered_set<ObjectId>> mEdges;
74 std::map<ObjectId, std::unordered_set<ObjectId>> mReverseEdges;
75 std::set<ObjectId> OtherVertices;
76 std::set<ObjectId> RemoveList;
77 };
78}
std::set< ObjectId > RemoveList
void removeID(ObjectId v=-1, ObjectId w=-1)
std::set< ObjectId > & getOtherVertices()
std::set< ObjectId > OtherVertices
std::map< ObjectId, std::unordered_set< ObjectId > > mEdges
void addEdge(ObjectId v, ObjectId w)
std::vector< ObjectId > mOrderVertices
std::map< ObjectId, std::unordered_set< ObjectId > > & edges()
std::map< ObjectId, std::unordered_set< ObjectId > > & reverseEdges()
std::map< ObjectId, std::unordered_set< ObjectId > > mReverseEdges
std::vector< ObjectId > & topologicalSort()
void topologicalSortUtil(ObjectId v, std::map< ObjectId, bool > &visited, std::stack< ObjectId > &stack)
std::set< ObjectId > & vertices()
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
uint32_t ObjectId
Definition Object.h:110