Computer Assited Medical Intervention Tool Kit  version 3.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MMLMonitorDisplayFactory.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $CAMITK_LICENCE_BEGIN$
3  *
4  * CamiTK - Computer Assisted Medical Intervention ToolKit
5  * (c) 2001-2014 UJF-Grenoble 1, CNRS, TIMC-IMAG UMR 5525 (GMCAO)
6  *
7  * Visit http://camitk.imag.fr for more information
8  *
9  * This file is part of CamiTK.
10  *
11  * CamiTK is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * CamiTK is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License version 3 for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22  *
23  * $CAMITK_LICENCE_END$
24  ****************************************************************************/
25 
26 #ifndef MMLMonitorDisplayFactory_H
27 #define MMLMonitorDisplayFactory_H
28 
29 #include <map>
30 #include <vector>
31 #include <string>
32 
33 #include <monitor/Monitor.h>
34 
35 class MMLMonitorDisplay;
36 class MMLComponent;
46 
47 public:
48 
51 
61  template<typename C>
62  bool registerClass(std::string id, Monitor::type type) {
63  if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
64  return false;
65  }
66  else {
67  mapObjectCreator.insert( std::pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
68  displaysByType[type].push_back(id);
69  return true;
70  }
71  }
72 
80  template<typename C>
81  bool registerClass(std::string id) {
82  if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
83  return false;
84  }
85  else {
86  mapObjectCreator.insert( std::pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
87  for (unsigned int i=0; i<Monitor::typeCount; i++) {
88  displaysByType[i].push_back(id);
89  }
90 
91  return true;
92  }
93  }
94 
96  bool isRegistered(std::string id);
97 
99  MMLMonitorDisplay* createMonitorDisplay(std::string id,Monitor* monitor,MMLComponent* manager);
100 
102  unsigned int getNumberOfDisplaysByType(Monitor::type type);
103 
105  std::string getDisplayByType(Monitor::type type,const unsigned int i);
106 
107 private:
108 
110 
111  typedef MMLMonitorDisplay* (*CreateMonitorDisplayFunctionPointer)(Monitor* monitor,MMLComponent* manager);
112 
114  std::map<std::string, CreateMonitorDisplayFunctionPointer> mapObjectCreator;
115 
120  template<typename C>
122  return new C(monitor,manager);
123  }
124 
126  std::vector<std::string> displaysByType[Monitor::typeCount];
127 
130 };
131 
132 
133 #endif // MMLMonitorDisplayFactory_H
A Factory for creating MMLMonitorDiplay.
Definition: MMLMonitorDisplayFactory.h:45
MMLMonitorDisplay * createMonitorDisplay(std::string id, Monitor *monitor, MMLComponent *manager)
Creates an MMLMonitorDisplay based on its string id or return null if there is no id in the map...
static MMLMonitorDisplay * createTheMonitorDisplay(Monitor *monitor, MMLComponent *manager)
function whose pointers are inserted into the map.
Definition: MMLMonitorDisplayFactory.h:121
TODO Describe the class here.
Definition: MMLMonitorDisplay.h:43
This class manage an MML monitoring document ".mml".
Definition: MMLComponent.h:47
std::map< std::string, CreateMonitorDisplayFunctionPointer > mapObjectCreator
A map between MonitorDisplay name as string to functions (CreateMonitorDisplayFunctionPointer) ...
Definition: MMLMonitorDisplayFactory.h:114
std::vector< std::string > displaysByType[Monitor::typeCount]
list of displays by type
Definition: MMLMonitorDisplayFactory.h:126
bool registerClass(std::string id)
Register a class into the map for classes wich can display every types of monitors.
Definition: MMLMonitorDisplayFactory.h:81
type
type of the values stored (please update typeCount and doc if you update the enum) SCALAR: the monito...
Definition: Monitor.h:57
A monitor calculate and store followed data (ex:calculation between current position and references) ...
Definition: Monitor.h:46
bool isRegistered(std::string id)
Returns true if id is in the map.
std::string getDisplayByType(Monitor::type type, const unsigned int i)
get a display name by its type and index
static MMLMonitorDisplayFactory * getInstance()
return the unique instance of the factory
unsigned int getNumberOfDisplaysByType(Monitor::type type)
give the number of displays registered for a specified type
bool registerClass(std::string id, Monitor::type type)
Register a class into the map A registered class can be created using createMonitorDisplay().
Definition: MMLMonitorDisplayFactory.h:62
static MMLMonitorDisplayFactory * instance
unique instance of the factory
Definition: MMLMonitorDisplayFactory.h:129
static const unsigned int typeCount
number of possible types (siez of the previous enum). Please always update if the enum is updated...
Definition: Monitor.h:64