From df488c0e70eb827d895c12aba85d5de168505b02 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Mon, 20 Oct 2003 21:38:32 -0400 Subject: Clean up callbacks base/callback.hh: Don't remove a callback when it is processed. Document the callback class --HG-- extra : convert_revision : 9d15500434fe0e5d623c624aac86976708adf0eb --- base/callback.hh | 66 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 8 deletions(-) (limited to 'base/callback.hh') 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__ -- cgit v1.2.3