rtop
mem_func.h
Go to the documentation of this file.
1 #include <map>
2 #include <vector>
3 #include <string>
4 
5 #ifndef MEM_FUNC_H_
6 #define MEM_FUNC_H_
7 #include "rtop_logger.h"
8 #include "columns.h"
9 #include "action.h"
10 
11 extern src::severity_logger<severity_level> lg;
12 extern logSpacer log_spacer;
13 
14 namespace rtop
15 {
16 
17  class ScreenManager;
18  class View;
19  class SimplePanelData;
20  class ColumnsPanelData;
21  class StateMachine;
22  class Columns;
23 
25 
32  {
33  private:
34  std::map<int, ScreenManager*> screen_objs;
35  std::map<int, View*> view_objs;
36  std::map<int, SimplePanelData*> panel_objs;
37  std::map<int, StateMachine*> sm_objs;
38  std::map<int, ProcDb*> db_objs;
39  std::map<int, ProcInfo*> pinfo_objs;
40  std::map<int, Columns*> clm_objs;
41 
42  std::map<std::string, void(ScreenManager::*)()> funcp_void_screen;
43  std::map<std::string, void(View::*)()> funcp_void_view;
44  std::map<std::string, void(SimplePanelData::*)()> funcp_void_panel;
45  std::map<std::string, void(StateMachine::*)()> funcp_void_sm;
46  std::map<std::string, void(ProcInfo::*)()> funcp_void_pinfo;
47  std::map<std::string, void(Columns::*)()> funcp_void_clms;
48 
49  public:
50 
51  // API which registers object member methods as callbacks for various types
52  void registerFunc(std::string func_name, void(ScreenManager::*)());
53  void registerFunc(std::string func_name, void(View::*)());
54  void registerFunc(std::string func_name, void(SimplePanelData::*)());
55  void registerFunc(std::string func_name, void(StateMachine::*)());
56  void registerFunc(std::string func_name, void(ProcInfo::*)());
57  void registerFunc(std::string func_name, void(Columns::*)());
58 
59  // API which invokes appropriate object's method using information in action object
60  void invoke(Action);
61  void invoke(Action, ScreenManager*);
62  void invoke(Action, View*);
64  void invoke(Action, ProcInfo*);
65  void invoke(Action, Columns*);
66 
67  // API which returns pointer to object given its uuid
68  View* getView(int);
71  StateMachine* getSm(int);
72  Columns* getColumn(int);
73  ProcDb* getDatabase(int);
74  ProcInfo* getProcInfo(int);
75 
76  // API which registers an object and assigns a uuid to it
77  void addScreen(int, ScreenManager*);
78  void addView(int, View*);
79  void addPanel(int, SimplePanelData*);
80  void addSm(int, StateMachine*);
81  void addDatabase(int, ProcDb*);
82  void addProcInfo(int, ProcInfo*);
83  void addColumn(int, Columns*);
84 
85 };
86 
88  void MemFuncPDict::registerFunc(std::string func_name, void(ScreenManager::*pfunc)())
89  {
91  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_Screen::";
92  funcp_void_screen[func_name] = pfunc;
93  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
94  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_Screen::";
96  }
97 
99  void MemFuncPDict::registerFunc(std::string func_name, void(View::*pfunc)())
100  {
102  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_View::";
103  funcp_void_view[func_name] = pfunc;
104  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
105  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_View::";
106  log_spacer.delSpace();
107  }
108 
110  void MemFuncPDict::registerFunc(std::string func_name, void(SimplePanelData::*pfunc)())
111  {
113  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_SPData::";
114  funcp_void_panel[func_name] = pfunc;
115  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
116  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_SPData::";
117  log_spacer.delSpace();
118  }
119 
121  void MemFuncPDict::registerFunc(std::string func_name, void(StateMachine::*pfunc)())
122  {
124  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_SM::";
125  funcp_void_sm[func_name] = pfunc;
126  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
127  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_SM::";
128  log_spacer.delSpace();
129  }
130 
132  void MemFuncPDict::registerFunc(std::string func_name, void(Columns::*pfunc)())
133  {
135  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_Columns::";
136  funcp_void_clms[func_name] = pfunc;
137  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
138  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_Columns::";
139  log_spacer.delSpace();
140  }
141 
143  void MemFuncPDict::registerFunc(std::string func_name, void(ProcInfo::*pfunc)())
144  {
146  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::registerFunc_PInfo::";
147  funcp_void_pinfo[func_name] = pfunc;
148  BOOST_LOG_SEV(lg, debug)<<log_spacer<<func_name;
149  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::registerFunc_PInfo::";
150  log_spacer.delSpace();
151  }
152 
155  {
156  if (screen_objs.find(uuid) != screen_objs.end())
157  return screen_objs[uuid];
158  else
159  return NULL;
160  }
161 
164  {
165  if (db_objs.find(uuid) != db_objs.end())
166  return db_objs[uuid];
167  else
168  return NULL;
169  }
170 
173  {
174  if (clm_objs.find(uuid) != clm_objs.end())
175  return clm_objs[uuid];
176  else
177  return NULL;
178  }
179 
182  {
183  if (pinfo_objs.find(uuid) != pinfo_objs.end())
184  return pinfo_objs[uuid];
185  else
186  return NULL;
187  }
188 
191  {
192  if (view_objs.find(uuid) != view_objs.end())
193  return view_objs[uuid];
194  else
195  return NULL;
196  }
197 
200  {
201  if (panel_objs.find(uuid) != panel_objs.end())
202  return panel_objs[uuid];
203  else
204  return NULL;
205  }
206 
209  {
210  if (sm_objs.find(uuid) != sm_objs.end())
211  return sm_objs[uuid];
212  else
213  return NULL;
214  }
215 
218  {
219  screen_objs[uuid] = scr;
220  }
221 
223  void MemFuncPDict::addView(int uuid, View* view)
224  {
225  view_objs[uuid] = view;
226  }
227 
230  {
231  panel_objs[uuid] = panel;
232  }
233 
235  void MemFuncPDict::addSm(int uuid, StateMachine* sm)
236  {
237  sm_objs[uuid] = sm;
238  }
239 
241  void MemFuncPDict::addColumn(int uuid, Columns* clm)
242  {
243  clm_objs[uuid] = clm;
244  }
245 
247  void MemFuncPDict::addProcInfo(int uuid, ProcInfo* pinfo)
248  {
249  pinfo_objs[uuid] = pinfo;
250  }
251 
253  void MemFuncPDict::addDatabase(int uuid, ProcDb* db)
254  {
255  db_objs[uuid] = db;
256  }
257 
260  {
261  if (funcp_void_screen.find(action.func_name) != funcp_void_screen.end())
262  {
264  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-screen::";
265  (pscreen->*funcp_void_screen[action.func_name])();
266  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::invoke-screeni::";
268  }
269  }
270 
272  void MemFuncPDict::invoke(Action action, View* pview)
273  {
274  if (funcp_void_view.find(action.func_name) != funcp_void_view.end())
275  {
277  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-view::";
278  (pview->*funcp_void_view[action.func_name])();
279  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::invoke-view::";
281  }
282  }
283 
286  {
287  if (funcp_void_panel.find(action.func_name) != funcp_void_panel.end())
288  {
289  log_spacer.addSpace();
290  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-panel::";
291  (ppanel->*funcp_void_panel[action.func_name])();
292  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict::invoke-panel::";
294  }
295  }
296 
298  void MemFuncPDict::invoke(Action action, ProcInfo* pinfo)
299  {
300  if (funcp_void_pinfo.find(action.func_name) != funcp_void_pinfo.end())
301  {
302  log_spacer.addSpace();
303  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-pinfo::";
304  (pinfo->*funcp_void_pinfo[action.func_name])();
305  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-pinfo::";
307  }
308  }
309 
311  void MemFuncPDict::invoke(Action action, Columns* pclm)
312  {
313 
314  if (funcp_void_clms.find(action.func_name) != funcp_void_clms.end())
315  {
317  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-clm::";
318  (pclm->*funcp_void_clms[action.func_name])();
319  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict::invoke-clm::";
321  }
322  }
323 
326  {
328 
329  if (screen_objs.find(action.object_uuid) != screen_objs.end())
330  {
331  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-screen_"<<action.object_uuid<<"_"<<action.func_name<<"::";
332  (screen_objs[action.object_uuid]->*funcp_void_screen[action.func_name])();
333  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-screen_"<<action.object_uuid<<"_"<<action.func_name<<"::";
335  return;
336  }
337 
338  if (view_objs.find(action.object_uuid) != view_objs.end())
339  {
340  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-view_"<<action.object_uuid<<"_"<<action.func_name<<"::";
341  (view_objs[action.object_uuid]->*funcp_void_view[action.func_name])();
342  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-view_"<<action.object_uuid<<"_"<<action.func_name<<"::";
344  return;
345  }
346 
347  if (panel_objs.find(action.object_uuid) != panel_objs.end())
348  {
349  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-panel_"<<action.object_uuid<<"_"<<action.func_name<<"::";
350  (panel_objs[action.object_uuid]->*funcp_void_panel[action.func_name])();
351  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-panel_"<<action.object_uuid<<"_"<<action.func_name<<"::";
353  return;
354  }
355 
356  if (sm_objs.find(action.object_uuid) != sm_objs.end())
357  {
358  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-sm_"<<action.object_uuid<<"_"<<action.func_name<<"::";
359  (sm_objs[action.object_uuid]->*funcp_void_sm[action.func_name])();
360  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-sm_"<<action.object_uuid<<"_"<<action.func_name<<"::";
362  return;
363  }
364 
365  if (clm_objs.find(action.object_uuid) != clm_objs.end())
366  {
367  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-clm_"<<action.object_uuid<<"_"<<action.func_name<<"::";
368  (clm_objs[action.object_uuid]->*funcp_void_clms[action.func_name])();
369  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-clm_"<<action.object_uuid<<"_"<<action.func_name<<"::";
371  return;
372  }
373 
374  if (pinfo_objs.find(action.object_uuid) != pinfo_objs.end())
375  {
376  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> MemFuncPDict_invoke-pinfo_"<<action.object_uuid<<"_"<<action.func_name<<"::";
377  (pinfo_objs[action.object_uuid]->*funcp_void_pinfo[action.func_name])();
378  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- MemFuncPDict_invoke-pinfo_"<<action.object_uuid<<"_"<<action.func_name<<"::";
380  return;
381  }
383  }
384 
389 
390 } // namespace rtop
391 #endif
392 
393 
394 
void addProcInfo(int, ProcInfo *)
adds ProcInfo object pointer to private object_type dictionary
Definition: mem_func.h:247
ProcInfo * getProcInfo(int)
returns pointer to ProcInfo object of given uuid
Definition: mem_func.h:181
ScreenManager * getScreen(int)
returns pointer to ScreenManager object of given uuid
Definition: mem_func.h:154
std::map< int, StateMachine * > sm_objs
Definition: mem_func.h:37
std::map< int, Columns * > clm_objs
Definition: mem_func.h:40
int object_uuid
Definition: action.h:19
void addColumn(int, Columns *)
adds Columns object pointer to private object_type dictionary
Definition: mem_func.h:241
Action object.
Definition: action.h:16
logSpacer log_spacer
Definition: rtop_logger.h:186
stores references to UI and non-UI objects and their callbacks.
Definition: mem_func.h:31
std::map< std::string, void(ProcInfo::*)()> funcp_void_pinfo
Definition: mem_func.h:46
src::severity_logger< severity_level > lg
Definition: rtop_logger.h:108
void addDatabase(int, ProcDb *)
adds ProcDb object pointer to private object_type dictionary
Definition: mem_func.h:253
data structure that hold property values for processes. contains facilities to enable their proper ac...
Definition: info.h:109
std::map< int, ProcDb * > db_objs
Definition: mem_func.h:38
std::map< std::string, void(View::*)()> funcp_void_view
Definition: mem_func.h:43
MemFuncPDict funcPDict
Definition: key_dict.h:20
StateMachine * getSm(int)
returns pointer to StateMachine object of given uuid
Definition: mem_func.h:208
2nd level UI object. Responsible for switching between panels and resolving key input
Definition: view2.h:30
void addSm(int, StateMachine *)
adds StateMachine object pointer to private object_type dictionary
Definition: mem_func.h:235
SimplePanelData * getPanel(int)
returns pointer to SimplePanelData object of given uuid
Definition: mem_func.h:199
std::map< int, ProcInfo * > pinfo_objs
Definition: mem_func.h:39
void delSpace()
deletes one white-space from white-space string corresponding to invoking thread
Definition: rtop_logger.h:151
std::map< std::string, void(StateMachine::*)()> funcp_void_sm
Definition: mem_func.h:45
void addSpace()
adds one white-space to white-space string corresponding to invoking thread
Definition: rtop_logger.h:135
void addScreen(int, ScreenManager *)
adds ScreenManager object pointer to private object_type dictionary
Definition: mem_func.h:217
Top Level UI object. Responsible to switching between views and capturing key input.
Definition: screen2.h:34
Columns * getColumn(int)
returns pointer to Columns object of given uuid
Definition: mem_func.h:172
std::map< int, ScreenManager * > screen_objs
Definition: mem_func.h:34
enables indentation of logs for easy viewing
Definition: rtop_logger.h:118
void registerFunc(std::string func_name, void(ScreenManager::*)())
registers ScreenManager class member methods
Definition: mem_func.h:88
std::map< std::string, void(Columns::*)()> funcp_void_clms
Definition: mem_func.h:47
Base class in heirarchy of UI objects responsible to storing the content associated with a panel and ...
Definition: panel2.h:34
void addView(int, View *)
adds ScreenManager object pointer to private object_type dictionary
Definition: mem_func.h:223
interfaces with linux API to read process information and update ProcDb with it
Definition: proc_info.h:24
ProcDb * getDatabase(int)
returns pointer to ProcDb object of given uuid
Definition: mem_func.h:163
void addPanel(int, SimplePanelData *)
adds SimplePanelData object pointer to private object_type dictionary
Definition: mem_func.h:229
statemachine that uses integer corresponding to object uuids to represent states
Definition: sm.h:20
void invoke(Action)
invokes member method based on supplied action using object_uuid and method_name
Definition: mem_func.h:325
std::string func_name
Definition: action.h:20
std::map< int, View * > view_objs
Definition: mem_func.h:35
View * getView(int)
returns pointer to View object of given uuid
Definition: mem_func.h:190
Definition: action.h:7
std::map< int, SimplePanelData * > panel_objs
Definition: mem_func.h:36
std::map< std::string, void(SimplePanelData::*)()> funcp_void_panel
Definition: mem_func.h:44
std::map< std::string, void(ScreenManager::*)()> funcp_void_screen
Definition: mem_func.h:42
responsible for managing the flow of information between ProcViewPanel, ProcDb and ProcInfo
Definition: columns.h:16