3 * File: DecomposeOrderResolver.cc
6 * Created on September 1, 2017, 10:36 AM
9 #include "decomposeorderresolver.h"
11 #include "ordernode.h"
12 #include "ordergraph.h"
14 DecomposeOrderResolver::DecomposeOrderResolver(OrderGraph* _graph, Vector<Order*>& _orders):
16 orders(_orders.getSize(), _orders.expose())
20 DecomposeOrderResolver::~DecomposeOrderResolver() {
23 HappenedBefore DecomposeOrderResolver::resolveOrder(uint64_t first, uint64_t second){
24 OrderNode *from = graph->getOrderNodeFromOrderGraph(first, false /*Don't create new node if doesn't exist*/);
26 return SATC_UNORDERED;
28 OrderNode *to = graph->getOrderNodeFromOrderGraph(second, false);
30 return SATC_UNORDERED;
32 if (from->sccNum != to->sccNum) {
33 OrderEdge *edge = graph->getOrderEdgeFromOrderGraph(from, to, false /* Don't create a new edge*/);
34 if (edge != NULL && edge->mustPos){
36 } else if( edge != NULL && edge->mustNeg){
39 switch(graph->getOrder()->type){
41 return from->sccNum < to->sccNum? SATC_FIRST: SATC_SECOND;
43 //Adding support for partial order ...
49 Order *suborder = NULL;
50 // We should ask this query from the suborder ....
51 suborder = orders.get(from->sccNum);
52 ASSERT(suborder != NULL);
53 return suborder->encoding.resolver->resolveOrder(from->id, to->id);