From: Nathan Binkert Date: Tue, 21 Oct 2003 01:38:32 +0000 (-0400) Subject: Clean up callbacks X-Git-Tag: m5_1.0_beta2~381 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=df488c0e70eb827d895c12aba85d5de168505b02;p=gem5.git Clean up callbacks base/callback.hh: Don't remove a callback when it is processed. Document the callback class --HG-- extra : convert_revision : 9d15500434fe0e5d623c624aac86976708adf0eb --- diff --git a/base/callback.hh b/base/callback.hh index a1d23b5ed..eee629cf5 100644 --- a/base/callback.hh +++ b/base/callback.hh @@ -31,26 +31,76 @@ #include -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 callbacks; + /** + * Simple typedef for the data structure that stores all of the + * callbacks. + */ + typedef std::list 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__