void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
bool checkReachable(const ModelAction *from, const ModelAction *to);
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
bool checkReachable(const ModelAction *from, const ModelAction *to);
private:
CycleNode * getNode(const ModelAction *);
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
private:
CycleNode * getNode(const ModelAction *);
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
bool checkReachable(CycleNode *from, CycleNode *to);
/** @brief A flag: true if this graph contains cycles */
bool hasCycles;
bool checkReachable(CycleNode *from, CycleNode *to);
/** @brief A flag: true if this graph contains cycles */
bool hasCycles;
};
/** @brief A node within a CycleGraph; corresponds to one ModelAction */
class CycleNode {
public:
CycleNode(const ModelAction *action);
};
/** @brief A node within a CycleGraph; corresponds to one ModelAction */
class CycleNode {
public:
CycleNode(const ModelAction *action);