YARP
Yet Another Robot Platform
module.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef YARP_MANAGER_MODULE_H
7 #define YARP_MANAGER_MODULE_H
8 
9 
10 #include <yarp/manager/ymm-types.h>
11 #include <yarp/manager/node.h>
12 #include <yarp/manager/data.h>
13 #include <yarp/manager/utility.h>
14 #include <yarp/manager/resource.h>
15 #include <yarp/conf/api.h>
16 
17 namespace yarp {
18 namespace manager {
19 
20 
21 class Author {
22 public:
23  Author() {}
24  Author(const char* name, const char* email) {
25  if(name) { strName = name;}
26  if(email) { strEmail = email; }
27  }
28  ~Author() {}
29 
30  void setName(const char* name) { if(name) { strName = name; } }
31  void setEmail(const char* email) { if(email) { strEmail = email; } }
32  const char* getName() { return strName.c_str(); }
33  const char* getEmail() { return strEmail.c_str(); }
34 
35  bool operator==(const Author& alt) const {
36  return (strName == alt.strName);
37  }
38 
39 private:
40  std::string strName;
41  std::string strEmail;
42 };
43 
47 class Argument{
48 
49 public:
50  Argument(const char* szParam, bool required=false,
51  const char* szDesc=nullptr, bool _switch=false) {
52  if(szParam) { strParam = szParam; }
53  if(szDesc) { strDesc = szDesc; }
54  bRequired = required;
55  bSwitch = _switch;
56  if(bSwitch) { strDefault = "off"; }
57  strValue = strDefault;
58  }
59  virtual ~Argument(){}
60 
61  void setParam(const char* szParam) { if(szParam) { strParam = szParam; } }
62  void setDefault(const char* szDefault) {if(szDefault) { strDefault = szDefault; } }
63  void setValue(const char* szValue) {if(szValue) { strValue = szValue; } }
64  const char* getDefault() { return strDefault.c_str(); }
65  const char* getParam() { return strParam.c_str(); }
66  const char* getValue() { return strValue.c_str(); }
67  const char* getDescription() { return strDesc.c_str(); }
68  bool isSwitch() { return bSwitch; }
69  bool isRequired() {return bRequired; }
70  bool operator==(const Argument& alt) const {
71  return (strParam == alt.strParam);
72  }
73 
74 protected:
75 
76 private:
77  std::string strParam;
78  std::string strDesc;
79  std::string strDefault;
80  std::string strValue;
81  bool bRequired;
82  bool bSwitch;
83 };
84 
85 
86 typedef std::vector<InputData> InputContainer;
87 typedef std::vector<OutputData> OutputContainer;
88 typedef std::vector<InputData>::iterator InputIterator;
89 typedef std::vector<OutputData>::iterator OutputIterator;
90 typedef std::vector<Author> AuthorContainer;
91 typedef std::vector<Author>::iterator AuthorIterator;
92 typedef std::vector<Argument> ArgumentContainer;
93 typedef std::vector<Argument>::iterator ArgumentIterator;
94 
95 
96 
100 class Module : public Node{
101 
102 public:
103  Module();
104  Module(const char* szName);
105  Module(const Module &mod);
106  ~Module() override;
107  Node* clone() override;
108  Module& operator=(const Module& rhs);
109 
110  void setName(const char* szName) { if(szName) { strName = szName; } }
111  void setRank(int rank) {iRank = rank;}
112  void setVersion(const char* szVersion) { if(szVersion) { strVersion = szVersion; } }
113  void setDescription(const char* szDesc) { if(szDesc) { strDescription = szDesc; } }
114  void setHost(const char* szHost) { if(szHost) { strHost = szHost; } }
115  void setForced(bool flag) { bForced = flag; }
116 
117  bool setParam(const char* szParam);
118  void setXmlFile(const char* szFilename) { if(szFilename) { strXmlFile = szFilename;} }
119  void setWorkDir(const char* szWDir) { if(szWDir) { strWorkDir = szWDir; } }
120  void setStdio(const char* szStdio) { if(szStdio) { strStdio = szStdio; } }
121  void setBroker(const char* szBroker) { if(szBroker) { strBroker = szBroker; } }
122  void setPrefix(const char* szPrefix) { if(szPrefix) { strPrefix = szPrefix; } }
123  void setEnvironment(const char* szEnv) {if(szEnv) { strEnvironment = szEnv; } }
124  void setBasePrefix(const char* szPrefix) { if(szPrefix) { strBasePrefix = szPrefix; } }
125  void setNeedDeployer(bool need) { bNeedDeployer = need; }
126  void setDisplay(const char* szDisplay) {if(szDisplay) { strDisplay = szDisplay; } }
127 
128  int getRank() { return iRank; }
129  const char* getName() { return strName.c_str(); }
130  const char* getVersion() { return strVersion.c_str(); }
131  const char* getDescription() { return strDescription.c_str(); }
132  const char* getHost() { return strHost.c_str(); }
133  bool getForced() { return bForced; }
134  bool getNeedDeployer() { return bNeedDeployer; }
135 
136  const char* getParam() { return strParam.c_str(); }
137  const char* getXmlFile() { return strXmlFile.c_str(); }
138  const char* getWorkDir() { return strWorkDir.c_str(); }
139  const char* getStdio() { return strStdio.c_str(); }
140  const char* getBroker() { return strBroker.c_str(); }
141  const char* getPrefix() { return strPrefix.c_str(); }
142  const char* getEnvironment() { return strEnvironment.c_str(); }
143  const char* getBasePrefix() { return strBasePrefix.c_str(); }
144  const char* getDisplay() { return strDisplay.c_str(); }
145 
146 
147  int argumentCount() { return arguments.size(); }
148  Argument& getArgumentAt(int index){ return arguments[index]; }
149  int outputCount() { return outputs.size(); }
150  OutputData& getOutputAt(int index) { return outputs[index]; }
151  int inputCount() { return inputs.size(); }
152  InputData& getInputAt(int index) { return inputs[index]; }
153  int resourceCount() const { return resources.size(); }
154  GenericResource& getResourceAt(int index) const { return *(resources[index]); }
155 
156  void addAuthor(Author& author) { authors.push_back(author); }
157  int authorCount() { return authors.size(); }
158  Author& getAuthorAt(int index) { return authors[index]; }
159  bool removeAuthor(Author& author);
160 
161  bool addArgument(Argument& arg);
162  bool removeArgument(Argument& argument);
163  bool addOutput(OutputData& output);
164  bool removeOutput(OutputData& output);
165  bool addInput(InputData& input);
166  bool removeInput(InputData& input);
167  bool addResource(GenericResource& res);
168  bool removeResource(GenericResource& res);
169 
170  void setPostExecWait(double t) { waitStart = t; }
171  double getPostExecWait() { return waitStart; }
172  void setPostStopWait(double t) { waitStop = t; }
173  double getPostStopWait() { return waitStop; }
174 
175 
176  void clearInputs() { inputs.clear(); }
177  void clearOutputs() { outputs.clear(); }
178  void clearResources() { resources.clear(); }
179 
180  void setOwner(Node* owner) { modOwner = owner; }
181  Node* owner() { return modOwner; }
182 
183  void clear();
184  // modelBased is used to keep the graphic and geometric
185  // information which is directly loaded from application
186  // description file.
187  GraphicModel& getModelBase() { return modelBase;}
188  void setModelBase(GraphicModel& mdl) { modelBase = mdl; };
189 
190 
191  friend class ModuleInterface;
192 
193 protected:
194 
195 private:
196  Node* modOwner;
197  std::string strName;
198  std::string strVersion;
199  std::string strDescription;
200  std::string strHost;
201  bool bForced;
202  int iRank;
203  ArgumentContainer arguments;
204  AuthorContainer authors;
205  OutputContainer outputs;
206  InputContainer inputs;
207  ResourcePContainer resources;
208 
209  std::string strParam;
210  std::string strXmlFile;
211  std::string strWorkDir;
212  std::string strStdio;
213  std::string strBroker;
214  bool bNeedDeployer;
215  std::string strPrefix;
216  std::string strEnvironment;
217  std::string strBasePrefix;
218  double waitStart;
219  double waitStop;
220  std::string strDisplay;
221  GraphicModel modelBase;
222 
223  ArgumentIterator findArgument(Argument& argument);
224  InputIterator findInput(InputData& input);
225  OutputIterator findOutput(OutputData& output);
226  ResourcePIterator findResource(GenericResource& output);
227  void swap(const Module &mod);
228  bool getParamValue(const char* key, bool bSwitch, std::string &param);
229 };
230 
231 typedef std::vector<Module*> ModulePContainer;
232 typedef std::vector<Module*>::iterator ModulePIterator;
233 
234 
235 #define PRINT_MODULE(m)\
236  {\
237  std::cout<<"Name : "<<m->getName()<<'\n';\
238  std::cout<<"Desc : "<<m->getDescription()<<'\n';\
239  std::cout<<"Version : "<<m->getVersion()<<'\n';\
240  std::cout<<"Rank : "<<m->getRank()<<'\n';\
241  std::cout<<"Param : "<<'\n';\
242  for(int i=0; i<m->argumentCount(); i++)\
243  {\
244  std::cout<<" "<<m->getArgumentAt(i).getParam()<<" (";\
245  std::cout<<m->getArgumentAt(i).getDescription()<<")"<<'\n';\
246  }\
247  std::cout<<"Authors : "<<'\n';\
248  for(int i=0; i<m->authorCount(); i++)\
249  std::cout<<" "<<m->getAuthorAt(i).getName()<<" ("<<m->getAuthorAt(i).getEmail()<<")"<<'\n';\
250  /*std::cout<<"Platforms: "<<'\n';\
251  for(int i=0; i<m->platformCount(); i++)\
252  std::cout<<" "<<m->getPlatformAt(i).getOS()\
253  <<", "<<m->getPlatformAt(i).getDistribution()<<'\n';*/\
254  std::cout<<"Inputs : "<<'\n';\
255  for(int i=0; i<m->inputCount(); i++)\
256  {\
257  std::cout<<" "<<m->getInputAt(i).getName()\
258  <<", "<<m->getInputAt(i).getPort();\
259  if(m->getInputAt(i).isRequired())\
260  std::cout<<", [REQUIRED]";\
261  if(m->getInputAt(i).withPriority())\
262  std::cout<<", [PRIORITY]";\
263  std::cout<<'\n';\
264  }\
265  std::cout<<"Outputs : "<<'\n';\
266  for(int i=0; i<m->outputCount(); i++)\
267  std::cout<<" "<<m->getOutputAt(i).getName()\
268  <<", "<<m->getOutputAt(i).getPort()<<'\n';\
269  std::cout<<'\n';\
270  }
271 
272 } // namespace yarp
273 } // namespace manager
274 
275 
276 #endif // YARP_MANAGER_MODULE
float t
Class Argument.
Definition: module.h:47
void setDefault(const char *szDefault)
Definition: module.h:62
const char * getDescription()
Definition: module.h:67
virtual ~Argument()
Definition: module.h:59
Argument(const char *szParam, bool required=false, const char *szDesc=nullptr, bool _switch=false)
Definition: module.h:50
bool operator==(const Argument &alt) const
Definition: module.h:70
const char * getParam()
Definition: module.h:65
const char * getValue()
Definition: module.h:66
const char * getDefault()
Definition: module.h:64
void setValue(const char *szValue)
Definition: module.h:63
void setParam(const char *szParam)
Definition: module.h:61
void setName(const char *name)
Definition: module.h:30
bool operator==(const Author &alt) const
Definition: module.h:35
const char * getName()
Definition: module.h:32
Author(const char *name, const char *email)
Definition: module.h:24
const char * getEmail()
Definition: module.h:33
void setEmail(const char *email)
Definition: module.h:31
Class InputData.
Definition: data.h:22
Class ModuleInterface.
Definition: application.h:161
Class Module.
Definition: module.h:100
void clearResources()
Definition: module.h:178
bool removeInput(InputData &input)
Definition: module.cpp:129
const char * getWorkDir()
Definition: module.h:138
bool removeOutput(OutputData &output)
Definition: module.cpp:108
void setStdio(const char *szStdio)
Definition: module.h:120
bool removeResource(GenericResource &res)
Definition: module.cpp:151
OutputData & getOutputAt(int index)
Definition: module.h:150
const char * getXmlFile()
Definition: module.h:137
void setWorkDir(const char *szWDir)
Definition: module.h:119
void setXmlFile(const char *szFilename)
Definition: module.h:118
InputData & getInputAt(int index)
Definition: module.h:152
const char * getVersion()
Definition: module.h:130
void setEnvironment(const char *szEnv)
Definition: module.h:123
void setHost(const char *szHost)
Definition: module.h:114
const char * getName()
Definition: module.h:129
const char * getBroker()
Definition: module.h:140
Node * clone() override
Definition: module.cpp:75
bool removeAuthor(Author &author)
Definition: module.cpp:162
void setNeedDeployer(bool need)
Definition: module.h:125
void setForced(bool flag)
Definition: module.h:115
const char * getBasePrefix()
Definition: module.h:143
void setDescription(const char *szDesc)
Definition: module.h:113
Argument & getArgumentAt(int index)
Definition: module.h:148
void setPrefix(const char *szPrefix)
Definition: module.h:122
int resourceCount() const
Definition: module.h:153
void setModelBase(GraphicModel &mdl)
Definition: module.h:188
void addAuthor(Author &author)
Definition: module.h:156
const char * getStdio()
Definition: module.h:139
const char * getHost()
Definition: module.h:132
void setRank(int rank)
Definition: module.h:111
bool removeArgument(Argument &argument)
Definition: module.cpp:89
bool setParam(const char *szParam)
Definition: module.cpp:254
void setPostStopWait(double t)
Definition: module.h:172
GraphicModel & getModelBase()
Definition: module.h:187
void setName(const char *szName)
Definition: module.h:110
void setBasePrefix(const char *szPrefix)
Definition: module.h:124
const char * getEnvironment()
Definition: module.h:142
const char * getParam()
Definition: module.h:136
double getPostStopWait()
Definition: module.h:173
void setBroker(const char *szBroker)
Definition: module.h:121
bool addArgument(Argument &arg)
Definition: module.cpp:82
const char * getPrefix()
Definition: module.h:141
Module & operator=(const Module &rhs)
Definition: module.cpp:31
GenericResource & getResourceAt(int index) const
Definition: module.h:154
const char * getDescription()
Definition: module.h:131
double getPostExecWait()
Definition: module.h:171
bool addInput(InputData &input)
Definition: module.cpp:121
Author & getAuthorAt(int index)
Definition: module.h:158
void setOwner(Node *owner)
Definition: module.h:180
bool addResource(GenericResource &res)
Definition: module.cpp:142
void setPostExecWait(double t)
Definition: module.h:170
const char * getDisplay()
Definition: module.h:144
bool addOutput(OutputData &output)
Definition: module.cpp:100
void setVersion(const char *szVersion)
Definition: module.h:112
void setDisplay(const char *szDisplay)
Definition: module.h:126
bool getNeedDeployer()
Definition: module.h:134
a Node of a Graph
Definition: node.h:65
std::vector< InputData > InputContainer
Definition: module.h:86
std::vector< Author >::iterator AuthorIterator
Definition: module.h:91
std::vector< GenericResource * >::iterator ResourcePIterator
Definition: resource.h:60
std::vector< OutputData > OutputContainer
Definition: module.h:87
std::vector< InputData >::iterator InputIterator
Definition: module.h:88
std::vector< Module * > ModulePContainer
Definition: module.h:231
std::vector< Argument > ArgumentContainer
Definition: module.h:92
std::vector< Author > AuthorContainer
Definition: module.h:90
std::vector< GenericResource * > ResourcePContainer
Definition: resource.h:59
std::vector< OutputData >::iterator OutputIterator
Definition: module.h:89
std::vector< Module * >::iterator ModulePIterator
Definition: module.h:232
std::vector< Argument >::iterator ArgumentIterator
Definition: module.h:93
The main, catch-all namespace for YARP.
Definition: dirs.h:16