Clean up callbacks
authorNathan Binkert <binkertn@umich.edu>
Tue, 21 Oct 2003 01:38:32 +0000 (21:38 -0400)
committerNathan Binkert <binkertn@umich.edu>
Tue, 21 Oct 2003 01:38:32 +0000 (21:38 -0400)
base/callback.hh:
    Don't remove a callback when it is processed.
    Document the callback class

--HG--
extra : convert_revision : 9d15500434fe0e5d623c624aac86976708adf0eb

base/callback.hh

index a1d23b5ed2577e1cae0b52c35e72bb1891c63f07..eee629cf545fe4de5de9e8c27193511bc1f657a6 100644 (file)
 
 #include <list>
 
-class Callback {
+/**
+ * Generic callback class.  This base class provides a virutal process
+ * function that gets called when the callback queue is processed.
+ */
+class Callback
+{
   public:
+    /**
+     * virtualize the destructor to make sure that the correct one
+     * gets called.
+     */
     virtual ~Callback() {}
+
+    /**
+     * virtual process function that is invoked when the callback
+     * queue is executed.
+     */
     virtual void process() = 0;
 };
 
 class CallbackQueue
 {
   protected:
-    std::list<Callback *> callbacks;
+    /**
+     * Simple typedef for the data structure that stores all of the
+     * callbacks.
+     */
+    typedef std::list<Callback *> queue;
+
+    /**
+     * List of all callbacks.  To be called in fifo order.
+     */
+    queue callbacks;
 
   public:
-    void add(Callback *callback) { callbacks.push_back(callback); }
+    /**
+     * Add a callback to the end of the queue
+     * @param callback the callback to be added to the queue
+     */
+    void add(Callback *callback)
+    {
+        callbacks.push_back(callback);
+    }
+
+    /**
+     * Find out if there are any callbacks in the queue
+     */
     bool empty() const { return callbacks.empty(); }
-    void processOne() {
-        Callback *c = callbacks.front();
-        callbacks.pop_front();
-        c->process();
+
+    /**
+     * process all callbacks
+     */
+    void process()
+    {
+        queue::iterator i = callbacks.begin();
+        queue::iterator end = callbacks.end();
+
+        while (i != end) {
+            (*i)->process();
+            ++i;
+        }
+    }
+
+    /**
+     * clear the callback queue
+     */
+    void clear()
+    {
+        callbacks.clear();
     }
-    void processAll() { while (!empty()) processOne(); }
 };
 
 #endif // __CALLBACK_HH__