ImGraph
 All Classes Functions Variables Enumerations Pages
ProcessManager.h
1 #ifndef _PROCESS_MANAGER_HEADER_
2 #define _PROCESS_MANAGER_HEADER_
3 
4 #ifdef _WIN32
5 #pragma warning(push)
6 #pragma warning(disable:4996 4251 4275 4800 4190)
7 #endif
8 #include <boost/function.hpp>
9 #include <boost/functional/factory.hpp>
10 #include <boost/thread/recursive_mutex.hpp>
11 #include <boost/thread/lock_guard.hpp>
12 #include <iostream>
13 #ifdef _WIN32
14 #pragma warning(pop)
15 #endif
16 
17 #include "blocks/ParamValue.h"
18 
19 namespace charliesoft
20 {
21  class Block;
22  struct ParamDefinition;
23 
24  enum AlgoType
25  {
26  input, imgProcess, videoProcess, mathOperator, output
27  };
28 
29  typedef boost::function< Block*() > Algo_factory;
30 
31 #define _PROCESS_MANAGER ProcessManager::getInstance()
32 
34  {
35  std::vector<ParamDefinition> emptyVector;
36  std::map< AlgoType, std::vector<std::string> > listOfAlgorithms_;
37  std::map< std::string, std::vector<ParamDefinition> > algorithmInParams_;
38  std::map< std::string, std::vector<ParamDefinition> > algorithmSubParams_;
39  std::map< std::string, std::vector<ParamDefinition> > algorithmOutParams_;
40  std::map< std::string, Algo_factory > algo_factory_;
41  static ProcessManager* _ptr;
42 
44  ~ProcessManager(){};
45  static boost::recursive_mutex _listBlockMutex;
46  public:
47  static ProcessManager* getInstance();
48  static void releaseInstance();
49 
50  std::vector<std::string> getAlgos(AlgoType type) const;
51  const std::vector<ParamDefinition>& getAlgo_InParams(std::string name) const;
52  const std::vector<ParamDefinition>& getAlgo_SubParams(std::string name) const;
53  const std::vector<ParamDefinition>& getAlgo_OutParams(std::string name) const;
54 
55  template<typename T>
56  bool addNewAlgo(AlgoType type, std::string name)
57  {
58  boost::lock_guard<boost::recursive_mutex> guard(_listBlockMutex);
59  algo_factory_[name] = boost::factory<T*>();
60  listOfAlgorithms_[type].push_back(name);
61  algorithmInParams_[name] = T::getListParams();
62  algorithmOutParams_[name] = T::getListOutputs();
63  algorithmSubParams_[name] = T::getListSubParams();
64  return true;
65  }
66 
67  AlgoType getAlgoType(std::string algo_name) const;
68  Block* createAlgoInstance(std::string algo_name) const;
69  ParamType getParamType(std::string algo_name, std::string paramName, bool input) const;
70  std::string getParamHelp(std::string algo_name, std::string paramName, bool input) const;
71  };
72 }
73 
74 #endif
Definition: Block.h:197
Definition: ProcessManager.h:33