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() {
24 HappenedBefore DecomposeOrderResolver::resolveOrder(uint64_t first, uint64_t second){
25 OrderNode *from = graph->getOrderNodeFromOrderGraph(first, false /*Don't create new node if doesn't exist*/);
27 return SATC_UNORDERED;
29 OrderNode *to = graph->getOrderNodeFromOrderGraph(second, false);
31 return SATC_UNORDERED;
33 if (from->sccNum != to->sccNum) {
34 OrderEdge *edge = graph->getOrderEdgeFromOrderGraph(from, to, false /* Don't create a new edge*/);
35 if (edge != NULL && edge->mustPos){
37 } else if( edge != NULL && edge->mustNeg){
40 switch(graph->getOrder()->encoding.type){
42 return from->sccNum < to->sccNum? SATC_FIRST: SATC_SECOND;
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);