ImGraph
 All Classes Functions Variables Enumerations Pages
SubBlock.h
1 #ifndef _BLOCK_SUB_DEF_H
2 #define _BLOCK_SUB_DEF_H
3 #ifdef _WIN32
4 #pragma warning(push)
5 #pragma warning(disable:4996 4251 4275 4800 4503)
6 #endif
7 #include <vector>
8 #include <boost/thread/mutex.hpp>
9 #include <boost/algorithm/string.hpp>
10 #ifdef _WIN32
11 #pragma warning(pop)
12 #endif
13 
14 #include "Block.h"
15 #include "Graph.h"
16 
17 namespace charliesoft
18 {
19 
20  class SubBlock :public Block
21  {
22  protected:
23  friend class charliesoft::ProcessManager;
24  friend class charliesoft::GraphOfProcess;
25 
27  //The parameters are only known after instanciation...
28  static std::vector<ParamDefinition> getListParams()
29  {return std::vector <ParamDefinition>();}
30  static std::vector<ParamDefinition> getListOutputs()
31  {return std::vector <ParamDefinition>();}
32  static std::vector<ParamDefinition> getListSubParams()
33  {return std::vector <ParamDefinition>();}
35  static bool addedToList;
36  boost::mutex _mtx_1; // explicit mutex declaration
37 
38 
39  std::vector<BlockLink> externBlocksInput;
40  std::vector<BlockLink> externBlocksOutput;
41 
42  boost::condition_variable _wait_param_update;
43 
44  GraphOfProcess* _subGraph;
45  virtual bool run(bool oneShot = false);
46  public:
47  SubBlock();
48  SubBlock(std::string name);
49 
50  virtual void init();
51  virtual void release();
52 
53  virtual void setGraph(GraphOfProcess* processes){
54  _processes = processes;
55  _subGraph->setParent(processes, this);
56  };
57 
58  virtual boost::property_tree::ptree getXML();
59  virtual void initFromXML(boost::property_tree::ptree* tree,
60  std::vector < std::pair<ParamValue*, unsigned int> >& toUpdate,
61  std::map<unsigned int, ParamValue*>& addressesMap,
62  std::vector<ConditionOfRendering*>& condToUpdate);
63 
64  GraphOfProcess* getSubGraph() const { return _subGraph; };
65  void addExternLink(const BlockLink& link, bool isInput);
66  void removeExternLink(const BlockLink& link);
67 
68  void waitUpdateParams(boost::unique_lock<boost::mutex>& lock);
69 
70  const std::vector<BlockLink>& getExternBlocksInput() const { return externBlocksInput; }
71  const std::vector<BlockLink>& getExternBlocksOutput() const { return externBlocksOutput; }
72  };
73 
74 };
75 
76 #endif
Definition: Graph.h:26
std::vector< BlockLink > externBlocksInput
input parameters the user had added to block
Definition: SubBlock.h:39
std::vector< BlockLink > externBlocksOutput
output parameters the user had added to block
Definition: SubBlock.h:40
Definition: Block.h:197
GraphOfProcess * _processes
list of process currently in use
Definition: Block.h:238
boost::condition_variable _wait_param_update
parameter update from subgraph sync condition
Definition: SubBlock.h:42
Definition: SubBlock.h:20
Definition: ProcessManager.h:33