+ template <typename T, typename U>
+ bool addEdge(const T *from, const U *to);
+
+ template <typename T>
+ void addRMWEdge(const T *from, const ModelAction *rmw);
+
+ bool checkForCycles() const;
+ bool checkPromise(const ModelAction *from, Promise *p) const;
+
+ template <typename T, typename U>
+ bool checkReachable(const T *from, const U *to) const;
+
+ void startChanges();
+ void commitChanges();
+ void rollbackChanges();
+#if SUPPORT_MOD_ORDER_DUMP
+ void dumpNodes(FILE *file) const;
+ void dumpGraphToFile(const char *filename) const;
+
+ void dot_print_node(FILE *file, const ModelAction *act);
+ template <typename T, typename U>
+ void dot_print_edge(FILE *file, const T *from, const U *to, const char *prop);
+#endif
+
+ bool resolvePromise(const Promise *promise, ModelAction *writer);
+
+ SNAPSHOTALLOC