IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
DataItemNodeFactory.h
1 // DataItemNodeFactory.h:
3 // ----------------------
4 //
15 
16 #ifndef __IPSDKBASEDATA_DATAITEMNODEFACTORY_H__
17 #define __IPSDKBASEDATA_DATAITEMNODEFACTORY_H__
18 
19 // suppression warnings
20 // warning C4275: non dll-interface class 'boost::noncopyable_::noncopyable' used as base for dll-interface class 'ipsdk::DataItemNodeFactory'
21 // warning C4251: 'ipsdk::DataItemNodeFactory::_factoryMap' : class 'std::map<_Kty,_Ty>' needs to have dll-interface to be used by clients of class 'ipsdk::DataItemNodeFactory'
22 #pragma warning (push)
23 #pragma warning (disable : 4275 4251)
24 
27 #include <boost/noncopyable.hpp>
28 #include <map>
29 #include <set>
30 
31 namespace ipsdk {
32 
35 
36 class IPSDKBASEDATA_API DataItemNodeFactory : public boost::noncopyable
37 {
38 public:
40  static DataItemNodeFactory& getInstance();
41 
42 protected:
48 
49 // methods
50 public:
52  bool isRegistredNode(const std::string& className) const;
53 
55  std::set<std::string> getRegistredNodes() const;
56 
60  template <typename NodeType>
61  void registerNode();
62 
66  template <typename NodeType>
67  void unRegisterNode();
68 
72  const std::string& getNodeName(const std::string& className) const;
73 
77  const std::string& getNodeToolTip(const std::string& className) const;
78 
82  const std::string& getNodeLibraryName(const std::string& className) const;
83 
87  const boost::filesystem::path& getNodeHeaderPath(const std::string& className) const;
88 
92  DataItemNodePtr createNode(const std::string& className) const;
93 
94 protected:
97  struct NodeInfo
98  {
100  std::string _nodeName;
101 
103  std::string _nodeToolTip;
104 
106  std::string _nodeLibraryName;
107 
109  boost::filesystem::path _nodeHeaderPath;
110 
113  };
114 
118  void registerNode(const std::string& className,
119  const NodeInfo& nodeInfo);
120 
124  void unRegisterNode(const std::string& className);
125 
126 // attributes
127 protected:
129  typedef std::map<std::string, NodeInfo> FactoryMap;
130 
133 };
134 
137 
138 template <typename NodeType>
139 inline void
141 {
142  // retrieve node class name
143  const std::string& className = NodeType::getTypeName();
144 
145  // create a node information structure
146  NodeInfo nodeInfo;
147  nodeInfo._nodeName = NodeType::getObjectNameStr();
148  nodeInfo._nodeToolTip = NodeType::getToolTipStr();
149  nodeInfo._nodeLibraryName = NodeType::getLibraryNameStr();
150  nodeInfo._nodeHeaderPath = NodeType::getHeaderPathStr();
151  nodeInfo._dataItemNodeCreator = &NodeType::createBaseNode;
152 
153  // register node into collection
154  registerNode(className, nodeInfo);
155 }
156 
157 template <typename NodeType>
158 inline void
160 {
161  // retrieve node class name
162  const std::string& className = NodeType::getTypeName();
163 
164  // unregister node from collection
165  unRegisterNode(className);
166 }
167 
170 
171 } // end of namespace ipsdk
172 
173 #pragma warning (pop)
174 
175 #endif // __IPSDKBASEDATA_DATAITEMNODEFACTORY_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
std::map< std::string, NodeInfo > FactoryMap
map associating a class name to node informations
Definition: DataItemNodeFactory.h:129
Factory singleton allowing dynamic creation of registred data item nodes.
Definition: DataItemNodeFactory.h:36
Definition of import/export macro for library.
std::string _nodeToolTip
node tooltip
Definition: DataItemNodeFactory.h:103
boost::shared_ptr< BaseDataItemNode > DataItemNodePtr
shared pointer to DataItemNode
Definition: DataItemTypes.h:158
boost::filesystem::path _nodeHeaderPath
node header path
Definition: DataItemNodeFactory.h:109
std::string _nodeName
node name
Definition: DataItemNodeFactory.h:100
struct used to store node informations
Definition: DataItemNodeFactory.h:97
void unRegisterNode()
un register a previously registred node from factory
Definition: DataItemNodeFactory.h:159
Predefined types for data items.
DataItemNodeCreator _dataItemNodeCreator
node creation function
Definition: DataItemNodeFactory.h:112
#define IPSDKBASEDATA_API
Import/Export macro for library IPSDKUtil.
Definition: IPSDKBaseDataExports.h:27
void registerNode()
register a new data item node into factory
Definition: DataItemNodeFactory.h:140
std::string _nodeLibraryName
node library name
Definition: DataItemNodeFactory.h:106
DataItemNodePtr(* DataItemNodeCreator)()
data item node creator function
Definition: DataItemTypes.h:176
FactoryMap _factoryMap
map storing string to node informations association
Definition: DataItemNodeFactory.h:132