cyclegraph: template for addEdge()
authorBrian Norris <banorris@uci.edu>
Tue, 29 Jan 2013 02:39:23 +0000 (18:39 -0800)
committerBrian Norris <banorris@uci.edu>
Wed, 6 Feb 2013 21:44:38 +0000 (13:44 -0800)
This function will be identical for all combinations of ModelAction /
Promise. So just make it a template.

cyclegraph.cc
cyclegraph.h

index 89c3f2ca39675ed048639e8e57428037ad88cc7f..49c462f5375c0695bb07d10b18f82ee156a73b29 100644 (file)
@@ -47,12 +47,19 @@ CycleNode * CycleGraph::getNode(const ModelAction *action)
 }
 
 /**
- * Adds an edge between two ModelActions. The ModelAction @a to is ordered
- * after the ModelAction @a from.
- * @param to The edge points to this ModelAction
- * @param from The edge comes from this ModelAction
+ * @brief Adds an edge between objects
+ *
+ * This function will add an edge between any two objects which can be
+ * associated with a CycleNode. That is, if they have a CycleGraph::getNode
+ * implementation.
+ *
+ * The object to is ordered after the object from.
+ *
+ * @param to The edge points to this object, of type T
+ * @param from The edge comes from this object, of type U
  */
-void CycleGraph::addEdge(const ModelAction *from, const ModelAction *to)
+template <typename T, typename U>
+void CycleGraph::addEdge(const T from, const U to)
 {
        ASSERT(from);
        ASSERT(to);
index 5c49992ea26b7dc99bc88cea4040e98c88cc3361..f812e24d4986abef6c45780a897e44bcb27bffe0 100644 (file)
@@ -24,7 +24,10 @@ class CycleGraph {
  public:
        CycleGraph();
        ~CycleGraph();
-       void addEdge(const ModelAction *from, const ModelAction *to);
+
+       template <typename T, typename U>
+       void addEdge(const T from, const U to);
+
        bool checkForCycles() const;
        void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
        bool checkPromise(const ModelAction *from, Promise *p) const;