#include <vector>
#include <inttypes.h>
+#include "mymemory.h"
+
class CycleNode;
class ModelAction;
~CycleGraph();
void addEdge(const ModelAction *from, const ModelAction *to);
bool checkForCycles();
+ bool checkForRMWViolation();
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
bool checkReachable(const ModelAction *from, const ModelAction *to);
+ void startChanges();
+ void commitChanges();
+ void rollbackChanges();
+ SNAPSHOTALLOC
private:
CycleNode * getNode(const ModelAction *);
/** @brief A flag: true if this graph contains cycles */
bool hasCycles;
+ bool oldCycles;
+
+ bool hasRMWViolation;
+ bool oldRMWViolation;
+
+ std::vector<CycleNode *> rollbackvector;
+ std::vector<CycleNode *> rmwrollbackvector;
};
/** @brief A node within a CycleGraph; corresponds to one ModelAction */
std::vector<CycleNode *> * getEdges();
bool setRMW(CycleNode *);
CycleNode* getRMW();
+ void popEdge() {
+ edges.pop_back();
+ };
+ void clearRMW() {
+ hasRMW=NULL;
+ }
+ SNAPSHOTALLOC
private:
/** @brief The ModelAction that this node represents */
const ModelAction *action;