changeset 32e374b7cbdb in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=32e374b7cbdb
description:
        sim: Split ClockedObject to make it usable to non-SimObjects

        Split ClockedObject into two classes: Clocked that provides the basic
        clock functionality, and ClockedObject that inherits from Clocked and
        SimObject to provide the functionality of the old ClockedObject.

diffstat:

 src/sim/clock_domain.hh   |  10 +++++-----
 src/sim/clocked_object.hh |  36 ++++++++++++++++++++++--------------
 2 files changed, 27 insertions(+), 19 deletions(-)

diffs (114 lines):

diff -r be3b60b52b31 -r 32e374b7cbdb src/sim/clock_domain.hh
--- a/src/sim/clock_domain.hh   Fri Aug 07 09:59:19 2015 +0100
+++ b/src/sim/clock_domain.hh   Fri Aug 07 09:59:22 2015 +0100
@@ -62,7 +62,7 @@
  */
 class DerivedClockDomain;
 class VoltageDomain;
-class ClockedObject;
+class Clocked;
 
 /**
  * The ClockDomain provides clock to group of clocked objects bundled
@@ -103,7 +103,7 @@
      * Pointers to members of this clock domain, so that when the clock
      * period changes, we can update each member's tick.
      */
-    std::vector<ClockedObject*> members;
+    std::vector<Clocked *> members;
 
   public:
 
@@ -123,11 +123,11 @@
     Tick clockPeriod() const { return _clockPeriod; }
 
     /**
-     * Register a ClockedObject to this ClockDomain.
+     * Register a Clocked object with this ClockDomain.
      *
-     * @param ClockedObject to add as a member
+     * @param Clocked to add as a member
      */
-    void registerWithClockDomain(ClockedObject *c)
+    void registerWithClockDomain(Clocked *c)
     {
         assert(c != NULL);
         assert(std::find(members.begin(), members.end(), c) == members.end());
diff -r be3b60b52b31 -r 32e374b7cbdb src/sim/clocked_object.hh
--- a/src/sim/clocked_object.hh Fri Aug 07 09:59:19 2015 +0100
+++ b/src/sim/clocked_object.hh Fri Aug 07 09:59:22 2015 +0100
@@ -55,14 +55,14 @@
 #include "sim/sim_object.hh"
 
 /**
- * The ClockedObject class extends the SimObject with a clock and
- * accessor functions to relate ticks to the cycles of the object.
+ * Helper class for objects that need to be clocked. Clocked objects
+ * typically inherit from this class. Objects that need SimObject
+ * functionality as well should inherit from ClockedObject.
  */
-class ClockedObject : public SimObject
+class Clocked
 {
 
   private:
-
     // the tick value of the next clock edge (>= curTick()) at the
     // time of the last call to update()
     mutable Tick tick;
@@ -72,13 +72,6 @@
     mutable Cycles cycle;
 
     /**
-     * Prevent inadvertent use of the copy constructor and assignment
-     * operator by making them private.
-     */
-    ClockedObject(ClockedObject&);
-    ClockedObject& operator=(ClockedObject&);
-
-    /**
      *  Align cycle and tick to the next clock edge if not already done. When
      *  complete, tick must be at least curTick().
      */
@@ -118,18 +111,21 @@
      * Create a clocked object and set the clock domain based on the
      * parameters.
      */
-    ClockedObject(const ClockedObjectParams* p) :
-        SimObject(p), tick(0), cycle(0), clockDomain(*p->clk_domain)
+    Clocked(ClockDomain &clk_domain)
+        : tick(0), cycle(0), clockDomain(clk_domain)
     {
         // Register with the clock domain, so that if the clock domain
         // frequency changes, we can update this object's tick.
         clockDomain.registerWithClockDomain(this);
     }
 
+    Clocked(Clocked &) = delete;
+    Clocked &operator=(Clocked &) = delete;
+
     /**
      * Virtual destructor due to inheritance.
      */
-    virtual ~ClockedObject() { }
+    virtual ~Clocked() { }
 
     /**
      * Reset the object's clock using the current global tick value. Likely
@@ -221,4 +217,16 @@
 
 };
 
+/**
+ * The ClockedObject class extends the SimObject with a clock and
+ * accessor functions to relate ticks to the cycles of the object.
+ */
+class ClockedObject
+    : public SimObject, public Clocked
+{
+  public:
+    ClockedObject(const ClockedObjectParams *p)
+        : SimObject(p), Clocked(*p->clk_domain) { }
+};
+
 #endif //__SIM_CLOCKED_OBJECT_HH__
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to