after merge (mostly tabbing issues)
[satune.git] / src / Translator / decomposeorderresolver.h
index 1f3b266f1474c8639178413f51bd451a03bd505b..507554747f544520688a7595db707eef58826807 100644 (file)
 #include "structs.h"
 #include "orderresolver.h"
 
+class DOREdge {
+public:
+       DOREdge(uint64_t _origfirst, uint64_t _origsecond, uint _orderindex, uint64_t _newfirst, uint64_t _newsecond) :
+               origfirst(_origfirst),
+               origsecond(_origsecond),
+               orderindex(_orderindex),
+               newfirst(_newfirst),
+               newsecond(_newsecond),
+               mustbetrue(false) {
+       }
+       uint64_t origfirst;
+       uint64_t origsecond;
+       uint orderindex;
+       uint64_t newfirst;
+       uint64_t newsecond;
+       bool mustbetrue;
+       CMEMALLOC;
+};
+
 class DecomposeOrderResolver : public OrderResolver {
 public:
-       DecomposeOrderResolver(OrderGraph *graph, Vector<Order *> &orders);
-       bool resolveOrder(uint64_t first, uint64_t second);
-       bool resolvePartialOrder(OrderNode *first, OrderNode *second);
+       DecomposeOrderResolver(Order *_order);
+       virtual bool resolveOrder(uint64_t first, uint64_t second);
        virtual ~DecomposeOrderResolver();
+       void mustOrderEdge(uint64_t first, uint64_t second);
+       void remapEdge(uint64_t oldfirst, uint64_t oldsecond, uint64_t newfirst, uint64_t newsecond);
+       void setEdgeOrder(uint64_t first, uint64_t second, uint sccNum);
+       void setOrder(uint sccNum, Order *order);
+       Order *getOrder(uint sccNum);
+       CMEMALLOC;
+
 private:
+       bool resolvePartialOrder(OrderNode *first, OrderNode *second);
+       void buildGraph();
        OrderGraph *graph;
+       Order *order;
        Vector<Order *> orders;
+       HashsetDOREdge edges;
 };
 
 #endif/* DECOMPOSEORDERRESOLVER_H */