gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
callback.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2003-2005 The Regents of The University of Michigan
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Nathan Binkert
29  */
30 
31 #ifndef __BASE_CALLBACK_HH__
32 #define __BASE_CALLBACK_HH__
33 
34 #include <list>
35 #include <string>
36 
41 class Callback
42 {
43  protected:
44  friend class CallbackQueue;
45  virtual void autoDestruct() {}
46 
47  public:
52  virtual ~Callback() {}
53 
58  virtual void process() = 0;
59 };
60 
63 template <class T, void (T::* F)()>
64 class MakeCallback : public Callback
65 {
66  protected:
67  T *object;
68  const bool autoDestroy;
69 
70  void autoDestruct() { if (autoDestroy) delete this; }
71 
72  public:
73  MakeCallback(T *o, bool auto_destroy = false)
74  : object(o), autoDestroy(auto_destroy)
75  { }
76 
77  MakeCallback(T &o, bool auto_destroy = false)
78  : object(&o), autoDestroy(auto_destroy)
79  { }
80 
81  void process() { (object->*F)(); }
82 };
83 
85 {
86  protected:
92 
97 
98  public:
100  std::string name() const { return "CallbackQueue"; }
101 
106  void
107  add(Callback *callback)
108  {
109  callbacks.push_back(callback);
110  }
111 
112  template <class T, void (T::* F)()>
113  void
114  add(T *obj)
115  {
116  add(new MakeCallback<T, F>(obj, true));
117  }
118 
119  template <class T, void (T::* F)()>
120  void
121  add(T &obj)
122  {
123  add(new MakeCallback<T, F>(&obj, true));
124  }
125 
129  bool empty() const { return callbacks.empty(); }
130 
134  void
136  {
137  queue::iterator i = callbacks.begin();
138  queue::iterator end = callbacks.end();
139 
140  while (i != end) {
141  (*i)->process();
142  ++i;
143  }
144  }
145 
149  void
151  {
152  callbacks.clear();
153  }
154 };
155 
156 #endif // __BASE_CALLBACK_HH__
void autoDestruct()
Definition: callback.hh:70
virtual void process()=0
virtual process function that is invoked when the callback queue is executed.
Generic callback class.
Definition: callback.hh:41
Bitfield< 7 > i
Definition: miscregs.hh:1378
void process()
process all callbacks
Definition: callback.hh:135
void process()
virtual process function that is invoked when the callback queue is executed.
Definition: callback.hh:81
virtual void autoDestruct()
Definition: callback.hh:45
virtual ~Callback()
virtualize the destructor to make sure that the correct one gets called.
Definition: callback.hh:52
MakeCallback(T &o, bool auto_destroy=false)
Definition: callback.hh:77
bool empty() const
Find out if there are any callbacks in the queue.
Definition: callback.hh:129
void add(Callback *callback)
Add a callback to the end of the queue.
Definition: callback.hh:107
std::string name() const
Definition: callback.hh:100
queue callbacks
List of all callbacks.
Definition: callback.hh:96
const bool autoDestroy
Definition: callback.hh:68
void clear()
clear the callback queue
Definition: callback.hh:150
void add(T *obj)
Definition: callback.hh:114
Helper template class to turn a simple class member function into a callback.
Definition: callback.hh:64
std::list< Callback * > queue
Simple typedef for the data structure that stores all of the callbacks.
Definition: callback.hh:91
void add(T &obj)
Definition: callback.hh:121
MakeCallback(T *o, bool auto_destroy=false)
Definition: callback.hh:73

Generated on Fri Jun 9 2017 13:03:40 for gem5 by doxygen 1.8.6