Computing SCC ...
[satune.git] / src / Encoders / orderencoder.h
1 /* 
2  * File:   orderencoder.h
3  * Author: hamed
4  *
5  * Created on August 8, 2017, 6:36 PM
6  */
7
8 #ifndef ORDERGRAPHBUILDER_H
9 #define ORDERGRAPHBUILDER_H
10 #include "classlist.h"
11 #include "structs.h"
12 #include "mymemory.h"
13
14 enum NodeStatus {NOTVISITED, VISITED, FINISHED};
15 typedef enum NodeStatus NodeStatus;
16
17 struct NodeInfo{
18         NodeStatus status;
19         uint finishTime;
20 };
21
22 struct OrderEncoder{
23         VectorOrderGraph graphs;
24 };
25
26 NodeInfo* allocNodeInfo();
27 void deleteNodeInfo(NodeInfo* info);
28 OrderEncoder* allocOrderEncoder();
29 void deleteOrderEncoder(OrderEncoder* This);
30
31 OrderEncoder* buildOrderGraphs(CSolver* This);
32 void computeStronglyConnectedComponentGraph(OrderGraph* graph);
33 void orderAnalysis(CSolver* solver);
34 void initializeNodeInfoSCC(OrderGraph* graph, HashTableNodeInfo* nodeToInfo);
35 void DFSNodeVisit(OrderNode* node, VectorOrderNode* finishNodes, HashTableNodeInfo* nodeToInfo, uint* timer, bool isReverse);
36 void DFS(OrderGraph* graph, VectorOrderNode* finishNodes, HashTableNodeInfo* nodeToInfo);
37 void DFSReverse(OrderGraph* graph, VectorOrderNode* finishNodes, HashTableNodeInfo* nodeToInfo);
38
39 #endif /* ORDERGRAPHBUILDER_H */
40